nodejs搭建接口服务器和mysql增删改查
简介
从零单排学会用nodejs搭建接口服务器,对mysql进行增删改查
准备工作
-
提取码:9knh
postman不需要注册
navicat有个破解补丁,把简体中文64位里面的两个文件拷贝到安装目录下即可。每次打开点击试用(如下图)
查看本地Nodejs版本(运行命令 node -v )
只要保证Nodejs版本为8即可
用navicat连接阿里云数据库,并创建一个表
打开软件 -> 文件 -> 新建连接 -> Mysql(如下图)
填写Mysql信息(如下图)
密码我单独给你
点击 测试连接,弹出 连接成功(如下图)
点击 确定后,左侧出来一个阿里云的链接(如下图)
双击 阿里云 , 左边有个 gzcs , 这个数据库就是我们要测试用的(如下图)
点击 创建表 (如下图)
输入名为 Id,长度 10,不为null,单击 键,自动递增 (如下图)
点击 添加字段,输入名为 name,字符集为 utf8 (如下图)
点击保存,输入表名 test (如下图)
左侧应该有 test 这个表了,双击(如下图)
猛点最下面的 + , 咱创建几条数据(如下图)
五条记录已经建好了,下面给这五条记录的 name 字段赋值,内容随便填,点击 √ (如下图)
大功告成,现在数据库已经准备好了。
安装express,搭建接口服务器
- 安装express应用生成器
1 | npm install express-generator -g |
- 创建一个叫 gzcs 的应用
1 | express gzcs |
- 打开目录应该长这样
安装依赖
1
npm install
运行应用
1
npm start
打开浏览器访问 http://localhost:3000
express里面增加get、post请求
打开 routes/index.js
增加如下代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14// 增加一个路径为a的GET路由,返回一个json
router.get('/a', function (req, res, next) {
res.send({
success: 1,
method: 'GET'
});
});
// 增加一个路径为a的POST路由,返回一个json
router.post('/a', function (req, res, next) {
res.send({
success: 1,
method: 'POST'
});
});整体的index.js长这样
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function (req, res, next) {
res.render('index', {
title: 'Express'
});
});
// 增加一个路径为a的GET路由,返回一个json
router.get('/a', function (req, res, next) {
res.send({
success: 1,
method: 'GET'
});
});
// 增加一个路径为a的POST路由,返回一个json
router.post('/a', function (req, res, next) {
res.send({
success: 1,
method: 'POST'
});
});
module.exports = router;重启服务
1
2按 ctrl + C
npm start
用postman测试新增的接口
- 打开 postman, 输入 http://localhost:3000/a ,点击 send (如下图)
- 点击 + , 把方法改为 post, 点击 send (如下图)
可以看到,刚才我们在 index.js 的路由文件里面加的两个接口已经成功了,可以监听 /a 的 get 请求和 /a 的 post 请求。
提升幸福感的小插件-nodemon
目前我们每次更新代码,都需要关闭服务后再执行 npm start,这样太麻烦了,可以全局安装 nodemon,并用 nodemon 启动服务,这样每次更新代码后,服务就会自动重启,很方便。
- 全局安装 nodemon
1 | npm install nodemon -g |
- 用 nodemon 启动服务
1 | nodemon bin/www |
用nodejs操纵mysql
- 安装mysql的npm包
1 | npm install mysql --save |
- 在项目根目录创建config文件夹,在config文件夹里创建db.js
- db.js里填入以下内容
密码我单独给你
1 | // gzcs就是我们的这次测试的数据库名 |
- 在routes/index.js里查询test表里所有数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28var express = require('express');
var router = express.Router();
var db = require("../config/db");
/* GET home page. */
router.get('/', function (req, res, next) {
res.render('index', {
title: 'Express'
});
});
// 增加一个路径为get的GET路由,返回一个json
router.get('/get', function (req, res, next) {
db.query('select * from test', function (err, rows) {
if (err) {
res.send({
success: 0,
message: '数据库报错,' + err
});
} else {
res.send({
success: 1,
data: rows,
message: '查询test表成功'
})
}
})
});
module.exports = router; - 在postman里测试咱们写的接口对不对
- 插入数据
1 | // insert |
注:插入的数据字段有多个的时候这么写db.query(
insert into test (name,age) values ('${name}', ${age})
, function(err, rows){});
- 在postman里测试插入接口
注:因为id为自增,所以不需要传入
删除数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17// delete
router.post('/delete', function (req, res, next) {
let id = req.body.id;
db.query(`delete from test where id=${id}`, function (err, rows) {
if (err) {
res.send({
success: 0,
message: '删除失败'
});
} else {
res.send({
success: 1,
message: '删除成功'
})
}
});
})注 因为id是int类型 所以where id=${id}不需要加引号,如果想通过name来删除,需要这么写db.query(
delete from test where name='${name}'
, function(err,row){});在postman里测试删除接口
已经删除了第6条记录
修改数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19// update
router.post('/update', function (req, res, next) {
let id = req.body.id;
let name = req.body.name;
db.query(`update test set name='${name}' where id=${id}`, function (err, rows) {
if (err) {
res.send({
success: 0,
message: '修改失败'
});
console.log(err);
} else {
res.send({
success: 1,
message: '修改成功'
})
}
});
});注:更新一条记录多个字段的时候这么写db.query(
update test set name='${name}',age=${age} where id=${id}
, function(err, rows){});在postman里测试修改接口
已经把第五条记录的 heihei 改成了 jiao
小结
目前你已经学会了最基本的增删改查,我把 index.js 的代码都贴出来,接下来会学习添加多条数据,插入多条数据,修改多条数据,删除多条数据,给表做分页,根据字段来排序。
1 | var express = require('express'); |
高级用法
- 首先我们把表弄的复杂一点
打开navicat,右键点击 设计表 ,如下图
- 新增 age 字段,点击 添加字段 ,输入 age ,类型是 Int, 长度是 3(因为没有超过999岁的人),点击 保存 。如下图
- 刷新数据库,就能看到新增的列了,如下图
- 我们给随便添加点数据,然后点击 √ ,如下图
修改一下多条数据操纵的接口,打开 config/db.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27var mysql = require("mysql");
var pool = mysql.createPool({
host: "47.95.2.204",
user: "root",
password: "", // 密码我单独给你
database: "gzcs"
});
function query(sql, callback) {
pool.getConnection(function (err, connection) {
connection.query(sql, function (err, rows) {
callback(err, rows);
connection.release();
});
});
}
// 新增多条操作的接口
function multipleQuery(sql, values, callback) {
pool.getConnection(function (err, connection) {
connection.query(sql, values, function (err, rows) {
callback(err, rows);
connection.release();
});
});
}
exports.query = query;
exports.multipleQuery = multipleQuery;在 router/index.js 里添加 插入多条 的方法
1 | // insert multiple |
- 在postman里测试插入多条接口,需要改变传值类型噢,要传json。
注:因为 age 是 Int 类型,所以不需要加 引号。
- 在navicat里查看数据库结果,可以看到有了33和44。如下图
- 删除刚才创建的 33 和 44
1 | // delete multiple |
- 在postman里测试删除多条接口,可以看到33和44都没了。如下图
新增、修改多条记录请多次调用单条新增、修改接口
把数据按age排序(desc 降序, asc 升序)
1
db.query('select * from test order by age desc', function (err, rows) {});
- 分页