• 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: "" };

    // id此处传值NULL,在数据库中id一定要设为自动增长,不然会报错
    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...");
    })

  • 相关阅读:
    ubuntu上部署ceph集群
    Ceph介绍及原理架构分享
    搭建家庭 NAS 服务器
    Android让屏幕保持常亮,不熄屏的三种方法
    IP流 TS流 PS流之间的关系及区别
    【WPF】Command 自定义命令
    WPF的路由事件、冒泡事件、隧道事件(预览事件)
    WPF之路路由事件
    c# string按指时间格式转化成datetim
    WPF样式(Style)入门
  • 原文地址:https://www.cnblogs.com/samve/p/14199055.html
Copyright © 2020-2023  润新知