导语:之前做过一个小我的项目,其中用到了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.jsconst 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 455Server 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 itsaffiliates. Other names may be trademarks of their respectiveowners.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.jsconst 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.jsconst 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-parserconst 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);        });    });    })

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

办法总结

通过方才的实战,置信你对curd曾经很相熟了,上面就简略封装一个查问的办法。

// simple.jsconst 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地址

具体应用办法,点击地址有文档介绍。

这样就比拟不便点,也看着直观。

好了,明天的总结就到这里,有什么疑难,请邮箱分割我。