網(wǎng)站的排名與權(quán)重網(wǎng)絡(luò)推廣方法有幾種
目錄
一、基礎(chǔ)增刪改查
1.1、項(xiàng)目準(zhǔn)備
1.2、創(chuàng)建user_info表
1.3、查詢用戶(getList)
1.4、添加用戶(addUser)
1.5、修改用戶(updateUser)
1.6、刪除用戶(deleteUser)
1.7、數(shù)據(jù)庫(kù)基礎(chǔ)語(yǔ)法擴(kuò)展
首先:
1、數(shù)據(jù)庫(kù)管理工具:Navicat或者SQLyog都可以
2、建立項(xiàng)目:這里可以直接借助 HBuilderX.exe 創(chuàng)建一個(gè)Node項(xiàng)目或者Express項(xiàng)目
3、測(cè)試接口工具:Apifox或者postman都可以
以上軟件自行下載
一、基礎(chǔ)增刪改查
1.1、項(xiàng)目準(zhǔn)備
在創(chuàng)建好的項(xiàng)目下直接npm i mysql
在app.js里面
var app = express();
app.listen(2323,()=>console.log('服務(wù)已啟動(dòng)在2323端口'))
在routes文件夾里的index.js
const mysql = require("mysql");
const conn = mysql.createConnection({host: "localhost",user: "root",password: "123456",port: 3307,database: "my-school", //自己本地建的數(shù)據(jù)庫(kù)名,node app.js成功后返回null,說(shuō)明鏈接成功
});
conn.connect((err) => {if (err) {console.error("數(shù)據(jù)庫(kù)連接失敗: ", err);return;}console.log("數(shù)據(jù)庫(kù)連接成功");
});
啟動(dòng)項(xiàng)目:node app.js
希望熱更新:npm install -g nodemon
將配置文件改成
"scripts": {"start": "nodemon ./bin/www"},
1.2、創(chuàng)建user_info表
CREATE TABLE user_info (id INT AUTO_INCREMENT PRIMARY KEY COMMENT '主鍵ID',selfName VARCHAR(50) NOT NULL COMMENT '姓名',PASSWORD VARCHAR(50) NOT NULL COMMENT '密碼',money DECIMAL(18,2) NOT NULL COMMENT '金額',userId VARCHAR(36) NOT NULL UNIQUE COMMENT '用戶ID',sex ENUM('F', 'M') NOT NULL COMMENT '性別',company VARCHAR(100) NOT NULL COMMENT '公司',job VARCHAR(50) NOT NULL COMMENT '職位',createdTime TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時(shí)間'
);
sql語(yǔ)法解釋
AUTO_INCREMENT
屬性表示每當(dāng)有新記錄插入表中時(shí),該列的值會(huì)自動(dòng)增加。
PRIMARY KEY
表示這是一個(gè)主鍵,意味著每行的這個(gè)值都是唯一的,并且索引會(huì)建立在這個(gè)列上以優(yōu)化查詢性能,一般和AUTO_INCREMENT連用
。
COMMENT 'XX'
是對(duì)該列的注釋。
NOT NULL
約束表示這個(gè)列不能包含NULL
值。
UNIQUE
約束表示這個(gè)列的所有值都必須是唯一的,即不允許有重復(fù)的user_id。
可變長(zhǎng)字符串(
VARCHAR
),數(shù)字是最大長(zhǎng)度。
money
列,數(shù)據(jù)類型為定點(diǎn)數(shù)(DECIMAL
),總共18位數(shù)字,其中2位是小數(shù)部分。
sex
列,數(shù)據(jù)類型為枚舉(ENUM
),只能包含兩個(gè)值:'F' 或 'M'。
createdTime
列,數(shù)據(jù)類型為時(shí)間戳(TIMESTAMP
),默認(rèn)值為當(dāng)前時(shí)間戳(CURRENT_TIMESTAMP
)。
1.3、查詢用戶(getList)
// 訪問(wèn) http://localhost:2323/getList 即可拿到數(shù)據(jù)
router.get("/getList", (req, res) => {let sql = "select * from user_info";conn.query(sql, (err, result) => {if (err) {console.error("查詢失敗: ", err);res.json({ code: 500, data: null, msg: err.message });return;}res.json({ code: 200, data: result, msg: "成功" });});
});
1.4、添加用戶(addUser)
效果展示
?
?
核心代碼interface.js
const addUser = (conn, req, res) => {const params = req.body;console.log(params, "params");const ret = {};if (params.selfName == "") {ret.code = 501;ret.data = null;ret.msg = "請(qǐng)輸入用戶名";res.json(ret);return;} else if (params.password == "") {ret.code = 501;ret.data = null;ret.msg = "請(qǐng)輸入密碼";res.json(ret);return;} else {conn.query(`INSERT INTO userlist(selfName,password,money,userId,sex,company,job) VALUES('${params.selfName}','${params.password}','${params.money}','${randomId()}','${params.sex}','${params.company}','${params.job}')`,function (err, results, fields) {if (err) {ret.code = 500;ret.data = null;ret.msg = err.sqlMessage;} else if (results.length === 0) {ret.code = 501;ret.msg = "請(qǐng)傳遞正確的參數(shù)";} else {ret.code = 200;ret.data = null;ret.msg = "添加成功";}res.json(ret);});}
};
const randomId = function uuid() {return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) {var r = (Math.random() * 16) | 0,v = c == "x" ? r : (r & 0x3) | 0x8;return v.toString(16);});
};
exports.addUser = addUser;
在routes文件夾里的index.js
var interface = require("./interface");
//添加用戶接口
router.post("/addUser", (req, res) => {interface.addUser(conn, req, res);
});
數(shù)據(jù)庫(kù)手動(dòng)插入一條數(shù)據(jù):
INSERT INTO user_info (selfName, PASSWORD, money, userId, sex, company, job)
VALUES
('AA', '123456', 634452.00, 'c10f5828-af92-4cff-a7e1-0b6ef53b2c8c8', 'F', 'XX集團(tuán)', '經(jīng)理');
增加數(shù)據(jù),請(qǐng)求發(fā)送成功后,報(bào)錯(cuò)Data too long for column 'userId' at row 1,可以將數(shù)據(jù)庫(kù)原有長(zhǎng)度36改成255
ALTER TABLE user_info MODIFY COLUMN userId VARCHAR(255);
1.5、修改用戶(updateUser)
效果展示
核心代碼interface.js
const updateUser = (conn, req, res) => {const params = req.body;console.log(params, "修改信息");const ret = {};if (params.selfName == "") {ret.code = 501;ret.data = null;ret.msg = "用戶名不能為空";res.json(ret);return;} else if (params.password == "") {ret.code = 501;ret.data = null;ret.msg = "密碼不能為空";res.json(ret);return;} else if (params.userId == "") {ret.code = 501;ret.data = null;ret.msg = "用戶ID不能為空";res.json(ret);return;} else {conn.query(`UPDATE user_info SET selfName='${params.selfName}',password='${params.password}',money='${params.money}',sex='${params.sex}',company='${params.company}',job='${params.job}' WHERE userId='${params.userId}'`,function (err, results, fields) {if (err) {ret.code = 500;ret.data = null;ret.msg = err.sqlMessage;} else if (results.length === 0) {ret.code = 501;ret.msg = "請(qǐng)傳遞正確的參數(shù)";} else {ret.code = 200;ret.data = null;ret.msg = "更新成功";}res.json(ret);});}
};
exports.updateUser = updateUser;
在routes文件夾里的index.js
// 修改用戶接口
router.post("/updateUser", (req, res) => {interface.updateUser(conn, req, res);
});
數(shù)據(jù)庫(kù)手動(dòng)修改該條數(shù)據(jù)【根據(jù)userId】:
UPDATE user_info
SET selfName = 'AAupdate', company = 'XX集團(tuán)update'
WHERE userId IN ('eff7f9b01-8e59-46ba-a4fdb-9294a29e3e79', 'another-userid-value');
1.6、刪除用戶(deleteUser)
效果展示
核心代碼interface.js
const deleteUser = (conn, req, res) => {const params = req.body;console.log(params, "刪除信息");const ret = {};if (params.userId == "") {ret.code = 501;ret.data = null;ret.msg = "請(qǐng)傳遞用戶id";res.json(ret);return;} else {conn.query("DELETE FROM user_info where userId=?",[params.userId],function (err, result) {if (err) {ret.code = 500;ret.data = null;ret.msg = err.sqlMessage;} else {ret.code = 200;ret.data = null;ret.msg = "刪除成功";}res.json(ret);});}
};
exports.deleteUser = deleteUser;
在routes文件夾里的index.js
// 刪除用戶接口
router.post("/deleteUser", (req, res) => {interface.deleteUser(conn, req, res);
});
數(shù)據(jù)庫(kù)手動(dòng)刪除該條數(shù)據(jù)【僅需要userId】:
DELETE FROM user_info WHERE userId='e0399a97-2956-4c3a-b19d-13f3bbc12c8d'
1.7、數(shù)據(jù)庫(kù)基礎(chǔ)語(yǔ)法擴(kuò)展
增刪改:
查詢方法比較多樣化