1. 程式人生 > 實用技巧 >Node.js操作Mysql

Node.js操作Mysql

/**
 * 操作MySql
 */

// 中介軟體:處理請求的,本質就是個函式

// 在 Express 中,對中介軟體有幾種分類

// 當請求進來,會從第一個中介軟體開始進行匹配
//    如果匹配,則進來
//       如果請求進入中介軟體之後,沒有呼叫 next 則程式碼會停在當前中介軟體
//       如果呼叫了 next 則繼續向後找到第一個匹配的中介軟體
//    如果不匹配,則繼續判斷匹配下一個中介軟體
//    
// 不關心請求路徑和請求方法的中介軟體
// 也就是說任何請求都會進入這個中介軟體

// 中介軟體本身是一個方法,該方法接收三個引數:
//    Request 請求物件
//    Response 響應物件
// next 下一個中介軟體 // 當一個請求進入一箇中間件之後,如果不呼叫 next 則會停留在當前中介軟體 // 所以 next 是一個方法,用來呼叫下一個中介軟體的 // 呼叫 next 方法也是要匹配的(不是呼叫緊挨著的那個) // 有輸入就要有輸出,遇到輸出則停止在當前中介軟體,即使在當前中介軟體的輸出之前已經有next() // 總結就是:進來後找匹配的中介軟體,匹配到了如果有輸出則終止,沒有輸出(一般是異常)則可以通過呼叫next方法繼續向後找到第一個匹配的中介軟體(一般是錯誤處理中介軟體) var express = require("express") var fs = require("fs")
var path = require("path") var mysql = require("mysql") var bodyParser = require("body-parser") var app = express() app.use("/static/", express.static("./static/")) app.engine("html", require("express-art-template")) app.use(bodyParser.urlencoded({ extended: false })) app.use(bodyParser.json()) var
connection = mysql.createConnection({ host: 'localhost', user: 'root', password: '12345678', database: 'blog' }); connection.connect(); app.get("/", function (req, res) { res.render("index.html"); }) app.get("/list", function (req, res, next) { var dataObj = { ret: false, total: 0, rows: [], msg: "" }; connection.query('SELECT * FROM users', function (error, results, fields) { if (!error) { dataObj.total = results.length; dataObj.ret = true; dataObj.rows = results; console.log('The solution is: ', results); //connection.end(); res.json(dataObj); } else { next(error); } }); }) app.post("/add", function (req, res, next) { var dataObj = { ret: false, msg: "" }; connection.query(`INSERT INTO users(id, name, sex, city, age) VALUES(NULL, '${req.body.name}', '${req.body.sex}', '${req.body.city}', '${req.body.age}')`, function (error, results, fields) { if (!error) { dataObj.ret = true; dataObj.msg = "新增使用者成功!"; res.json(dataObj); } else { // return res.status(500).send('Server Error') // 當呼叫 next 的時候,如果傳遞了引數,則直接往後找到帶有(四個引數的應用程式級別中介軟體) // 當發生錯誤的時候,我們可以呼叫 next 傳遞錯誤物件 // 然後就會被全域性錯誤處理中介軟體匹配到並處理之 next(error); } }); }) app.post("/edit", function (req, res, next) { let dataObj = { ret: false, msg: '' }; connection.query(`UPDATE users SET name='${req.body.name}',sex='${req.body.sex}',city='${req.body.city}',age='${req.body.age}' WHERE id='${req.body.id}'`, function (error, results, fields) { if (!error) { dataObj.ret = true; dataObj.msg = "更新使用者成功!"; res.json(dataObj); } else { next(error); } }); }) app.delete("/delete", function (req, res, next) { var dataObj = { ret: false, msg: "" }; var idArr = JSON.parse(req.body.userIdArr); connection.query(`DELETE FROM users WHERE id='${idArr[0]}'`, function (error, results, fields) { if (!error) { dataObj.ret = true; dataObj.msg = "刪除使用者成功!"; res.json(dataObj); } else { next(error); } }); }) app.get("/read", function(req, res, next){ var dataObj = { ret: false, msg: "" }; fs.readFile(path.join(__dirname + "/abc.txt"), function(error, data){ if(!error){ dataObj.msg = data.toString(); res.json(dataObj); }else{ next(error); } }) }) // 配置一個處理 404 的中介軟體 app.use(function (req, res) { res.render('404.html') }) // 配置一個全域性錯誤處理中介軟體 app.use(function (err, req, res, next) { res.status(500).json({ err_code: 500, message: err.message }) }) app.listen(7777, function () { console.log("server is running..."); })