zoukankan      html  css  js  c++  java
  • node和mysql的CURD总结

    导语:之前做过一个小项目,其中用到了node和mysql,现在就结合这两者做一个使用操作总结。CURD是数据库技术中的缩写词,代表创建(Create)、更新(Update)、读取(Retrieve)和删除(Delete)操作,用于处理数据等操作。

    目录

    • 前期准备
    • 实战演练
    • 方法总结

    前期准备

    安装php环境

    • 手动安装

    建议阅读本博客另一篇文章《win10手动配置php开发环境教程》

    • 集成环境安装

    可以使用这几个集成包:

    PHPStudy
    LNMP
    XAMPP
    wampserver
    appserv

    安装node环境

    nodejs官网上面下载然后安装,一步一步的安装好了以下,查询下那个版本。

    在这里插入图片描述

    实战演练

    本小节通过一个商品的增删改查来展示如何使用node来连接mysql进行各种操作。

    node准备

    • 安装依赖包
    $ mkdir demo
    $ cd demo
    $ npm init
    $ npm install express --save
    $ npm install -g express-generator
    $ npm install pm2 -g
    $ npm install supervisor
    
    • 启动node服务

    编写启动脚本

    // index.js
    const express = require('express');
    const app = express();
    const port = 3000;
    const db = require('./mysql');
    
    app.get('/', (req, res) => {
        res.send('Hello,demo!');
    })
    
    app.listen(port, () => {
        console.log('Server is running on port ', port + '!');
    })
    

    package.json加入以下命令

    "dev": "node index.js"

    // package.json
    {
      "name": "demo",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "test": "echo "Error: no test specified" && exit 1",
        "dev": "node index.js"
      },
      "author": "",
      "license": "ISC",
      "dependencies": {
        "express": "^4.17.1",
        "mysql": "^2.18.1",
        "supervisor": "^0.12.0"
      }
    }
    
    

    启动脚本

    $ npm run start
    # 或者
    $ supervisor index.js
    

    mysql准备

    建立一个名叫demo的数据库,然后建一个名称为goods的数据表,接着进行如下结构的配置。

    以下是具体的命令行操作方法。

    • 连接数据库
    $ mysql -h 127.0.0.1 -P 3306 -u demo -p
    # 输入密码后回车确认
    Enter password: 
    

    连接成功后如下所示:

    Welcome to the MySQL monitor.  Commands end with ; or g.
    Your MySQL connection id is 455
    Server version: 5.7.26 MySQL Community Server (GPL)
    
    Copyright (c) 2000, 2021, Oracle and/or its affiliates.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    
    mysql> 
    
    • sql语句操作
    -- 建立demo用户
    mysql> CREATE USER 'demo'@'127.0.0.1' IDENTIFIED BY 'demo123456.';
    
    -- 建立demo数据库
    mysql> CREATE DATABASE demo;
    
    -- 赋予用户demo操作数据库demo的权限
    mysql> GRANT ALL PRIVILEGES ON demo.* TO 'demo'@'127.0.0.1';
    FLUSH PRIVILEGES;
    
    -- 创建数据表
    mysql> CREATE TABLE `goods` (
      `id` int(11) NOT NULL COMMENT 'id',
      `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT '名称',
      `number` int(11) NOT NULL COMMENT '数量',
      `price` int(11) NOT NULL COMMENT '价格',
      `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
      `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='商品表';
    

    node连接mysql

    • 安装依赖包

    终于到了最关键的一步,首先安装mysql依赖包。回到demo目录下面,然后打开命令行。

    mysql包地址

    $ npm install mysql
    
    • 编写mysql文件
    // mysql.js
    const mysql = require('mysql');
    
    const connection = mysql.createConnection({
        host: '127.0.0.1',
        user: 'demo',
        password: 'demo123456.',
        database: 'demo'
    });
    
    connection.connect(function (err) {
        if (err) {
            console.error(`error connecting: ${err.stack}`);
            return;
        }
        console.log(`Mysql is connected! 连接id: ${connection.threadId}`);
    });
    
    module.exports = db;
    
    • 导入mysql

    引入index.js文件中

    // index.js
    const db = require('./mysql');
    

    运行成功后的截图:

    在这里插入图片描述

    curd操作

    以下操作均在index.js中操作。

    • 查询商品信息

    查询需要用到的语句SELECT <字段> FROM <表名> <查询条件>;

    例如:

    mysql> SELECT * FROM `goods`;
    

    *表示全部的字段,如果你只想要查询id和名称,只需要写入SELECT id,name FROM "goods"即可。

    // 查询商品信息
    app.get('/goods', (req, res) => {
        let result = {};
        db.query('SELECT * FROM `goods`', function (error, results, fields) {
            if (error) {
                result = {
                    code: 101,
                    msg: 'get_fail',
                    data: {
                        info: "查询失败!"
                    }
                }
            };
            result = {
                code: 200,
                msg: 'get_succ',
                data: {
                    info: "查询成功!",
                    list: results
                }
            }
            res.json(result);
        });
    })
    

    在地址栏输入http://localhost:3000/goods,便可以看到查询的信息。

    在这里插入图片描述

    • 添加商品信息

    刚刚查询了一下,发现里面的商品空空如也,现在来添加几条商品信息。

    创建需要用到的语句格式大致为INSERT INTO <表名>(<字段1,字段2,...>) VALUES (值1,);

    例如:

    mysql> INSERT INTO `goods`(`name`, `number`, `price`) VALUES ('香蕉', 8, 10);
    

    注意:添加商品是post请求,所以需要提前下载一个api接口软件,有利于测试,比较有名的是postman。请自行下载安装。

    postman下载地址

    接着开始进行商品的程序编写,由于mysql建议表,字段加反斜线,故本次mysql语句不使用模板字符串,而是使用字符串拼接方法。

    安装body-parser,这个是解析前端post请求的body内容。

    $ npm install body-parser
    

    引入index.js文件。

    // index.js
    // 添加商品
    // 引入body-parser
    const bodyParser = require('body-parser');
    app.use(bodyParser.urlencoded({ extended: false }))
    app.use(bodyParser.json());
    
    app.post('/goods', (req, res) => {
        let result = {};
        let params = req.body;
        let names = '',values = '';
        for (const key in params) {
            names += '`'+ key + '`,';
            if (key == 'name') {
                values += `"${params[key]}",`;
            } else {
                values += `${params[key]},`;
            }
        }
        names = names.slice(0, names.length-1);
        values = values.slice(0, values.length-1);
        db.query('SELECT id FROM `goods` WHERE name= "' + params.name + '"', function (error, results, fields) {
            if (error) {
                result = {
                    code: 101,
                    msg: 'get_fail',
                    data: {
                        info: "查询失败!"
                    }
                }
            };
            if (results && results.length) {
                result = {
                    code: 200,
                    msg: 'get_succ',
                    data: {
                        info: "商品已存在!"
                    }
                }
                return res.json(result);
            }
            db.query('INSERT INTO `goods`(' + names + ') VALUES (' + values + ')', function (error, results, fields) {
                if (error) {
                    result = {
                        code: 101,
                        msg: 'save_fail',
                        data: {
                            info: "添加失败!"
                        }
                    }
                };
                result = {
                    code: 200,
                    msg: 'save_succ',
                    data: {
                        info: "添加成功!",
                        des: {
                            id: results[0].insertId
                        }
                    }
                }
                return res.json(result);
            });
        });
        
    })
    

    打开postman,输入以下内容,然后点击send按钮,发送post请求。

    以下是结果截图。

    添加失败

    在这里插入图片描述

    添加成功

    在这里插入图片描述

    再次查询商品信息,出现了刚刚添加的内容。

    在这里插入图片描述

    • 修改商品信息

    有时候,添加的商品信息会有波动,那么现在就修改以下实时变动的商品信息属性。

    修改需要用到的语句格式大致为UPDATE <表名> SET 字段1=值1, 字段2=值2 <条件>;

    例如:

    mysql> UPDATE `goods` SET `number` = 15, `price` = 12 WHERE `id` = 1;
    

    下面就修改一下那个苹果的数量为15,价格为9.9。

    // 修改商品信息
    app.put('/goods', (req, res) => {
        let result = {};
        let params = req.body;
        if (!params.id) {
            return res.json({
                code: 101,
                msg: 'get_fail',
                data: {
                    info: "id不能为空!"
                }
            })
        }
        db.query('SELECT id FROM `goods` WHERE `id` = ' + params.id, function (error, results, fields) {
            if (error) {
                result = {
                    code: 101,
                    msg: 'get_fail',
                    data: {
                        info: "查询失败!"
                    }
                }
            };
            if (results && results.length == 0) {
                result = {
                    code: 200,
                    msg: 'get_succ',
                    data: {
                        info: "商品不存在!"
                    }
                }
                return res.json(result);
            }
            db.query('UPDATE `goods` SET `number` = ' + params.number + ', `price` = ' + params.price + ' WHERE `id` = ' + params.id, function (error, results, fields) {
                if (error) {
                    result = {
                        code: 101,
                        msg: 'save_fail',
                        data: {
                            info: "修改失败!"
                        }
                    }
                };
                result = {
                    code: 200,
                    msg: 'save_succ',
                    data: {
                        info: "修改成功!"
                    }
                }
                return res.json(result);
            });
        });
        
    })
    

    在这里插入图片描述

    • 删除商品

    如果商品卖完了,或者不卖了,可以下架商品,那这里直接删除这个商品的信息。

    删除需要用到的语句格式大致为DELETE FROM <表名> <条件>;

    例如:

    mysql> DELETE FROM `goods` WHERE `id` = 1;
    

    下面就删除一下那个苹果商品。

    // 删除商品
    app.delete('/goods', (req, res) => {
        let result = {};
        let params = req.body;
        if (!params.id) {
            return res.json({
                code: 101,
                msg: 'get_fail',
                data: {
                    info: "id不能为空!"
                }
            })
        }
        db.query('SELECT id FROM `goods` WHERE `id` = ' + params.id, function (error, results, fields) {
            if (error) {
                result = {
                    code: 101,
                    msg: 'get_fail',
                    data: {
                        info: "查询失败!"
                    }
                }
            };
            if (results && results.length == 0) {
                result = {
                    code: 200,
                    msg: 'get_succ',
                    data: {
                        info: "商品不存在!"
                    }
                }
                return res.json(result);
            }
            db.query('DELETE FROM `goods` WHERE `id` = ' + params.id, function (error, results, fields) {
                if (error) {
                    result = {
                        code: 101,
                        msg: 'get_fail',
                        data: {
                            info: "删除失败!"
                        }
                    }
                };
                result = {
                    code: 200,
                    msg: 'get_succ',
                    data: {
                        info: "删除成功!"
                    }
                }
                return res.json(result);
            });
        });
        
    })
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0wSD8EDE-1625142244984)(/img/nm-08.png)]

    以上就是比较简单的一个商品的CURD,所列举的例子都是比较基础的案例。

    方法总结

    经过刚才的实战,相信你对curd已经很熟悉了,下面就简单封装一个查询的方法。

    // simple.js
    const simple = (sql, params = null) => {
    
        var connection = mysql.createConnection(dbConfig);
    
        return new Promise(function (resolve, reject) {
    
            connection.connect();
            console.log('Database is connected!');
    
            connection.query(sql, params, (err, result) => {
                if (err) {
                    reject({
                        code: 102,
                        msg: 'get_fail',
                        data: {
                            info: '查询失败!',
                            detail: {
                                errno: err.errno,
                                sqlMessage: err.sqlMessage,
                                sql: err.sql
                            }
                        }
                    });
                } else {
                    resolve({
                        code: 200,
                        msg: 'get_succ',
                        data: {
                            info: '查询成功!',
                            data: result
                        }
                    });
                }
            })
    
            connection.end();
            console.log('Database is disconnected!');
    
        })
    }
    

    使用方法:

    app.get('/goods/test', async (req, res) => {
        let data = await simple('SELECT * FROM `goods`');
        return res.json(data);
    });
    

    这里推荐一个依赖包,这个可以生成mysql语句。

    $ npm install xqsql
    

    xqsql npm地址

    具体使用方法,点击地址有文档介绍。

    这样就比较方便点,也看着直观。

    好了,今天的总结就到这里,有什么疑问,请邮箱联系我。

  • 相关阅读:
    poj 3661
    hdu 4291 && hdu 4296
    codeforces LCM Challenge
    ural 1286
    Exhange2007 专题(一)特性 部署
    Research Http error code
    Exhange2007 专题(二)通过Web service对Exhange进行二次开发
    YouTube 架构学习体会
    .net framework 4.0环境下遇到版本不同编译不通过的解决办法
    利用ASP.NET MVC2进行网站验证
  • 原文地址:https://www.cnblogs.com/guanqiweb/p/14960671.html
Copyright © 2011-2022 走看看