Nodejs mysql实现用户注册登录

Nodejs mysql实现用户注册登录

七月 13, 2020

Nodejs 之 mysql 连接池

利用 express 脚手架打造一个服务器(没有安装脚手架的参考 express 官网)

1
$ express app # app只是项目名,可以随意更改名字

再进入 app 文件夹,安装项目依赖

1
2
3
4
5
$ cd app

$ npm i

$ npm start # 成功则可以在localhost:3000访问

引入 npm 中 mysql 第三方插件

1
$ npm i mysql -S

在 app 项目里新建 db 文件夹,里面放入 index.js 用于存放 mysql 连接池

1
2
3
4
5
6
7
8
9
10
// index.js
var mysql = require("mysql"); // 引入第三方插件mysql
var pool = mysql.createPool({
connectionLimit: 10, // 最大连接数
host: "localhost", // 数据库地址
user: "", // 数据库用户名
password: "", // 数据库密码
database: "", // 数据库名
});
module.exports = pool; // 将连接池输出

在 routes 文件夹中新建 login.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
// login.js
const express = require("express"); // 引入express
const mysql = require("../db"); // 引入刚才书写的index.js nodejs默认进入index命名的文件

const router = express.Router(); // 打造express路由

router.post("/login", (req, res, next) => {
// login为二级url
// 解构
const { username, password } = req.body; // 从前端(req.body)接收数据 如果是get请求就是req.query
const sql = `select * from users where username = '${username}' and password = '${password}'`; // 书写sql语句
mysql.query(sql, (err, data) => {
// 第一个参数sql语句,第二个是回调函数,错误优先
if (err) {
throw err;
}
if (data.length) {
// data.length = 0 即为false
res.send('{"msg":"用户名已存在"}');
} else {
res.send('{"msg":"用户名可以使用"}');
}
});
});

module.exports = router; // 将路由输出

在根目录 app.js 中增加下面两条语句配置路由

1
2
3
4
5
6
// app.js
var loginRouter = require("./routes/login"); // 引入刚才打造好并输出的路由

// ...

app.use("/api", loginRouter); // 使用中间件 api为base url

这样我们就做好登陆的接口: localhost:3000/api/login

在 routes 文件夹中新建 register.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
// register.js
const express = require("express");
const mysql = require("../db");

const router = express.Router();

router.post("/register", (req, res, next) => {
const { username, password, sex, phone, email, address, age } = req.body;
const sql = `insert into users(username,password,sex,phone,email,address,age) values (?,?,?,?,?,?,?)`; // ?是占位符
mysql.query(
sql,
[username, password, sex, phone, email, address, age],
(err, data) => {
// []是刚才占位符中所要填写的数据,这些数据来源于上方的解构
if (err) {
throw err;
}
if (data.affectedRows == 1) {
// data.affectedRows 可以判断是否注册成功
res.send("新加板块成功!");
}
}
);
});

module.exports = router;

在根目录 app.js 中增加下面两条语句配置路由

1
2
3
4
5
6
// app.js
var registerRouter = require("./routes/register"); // 引入刚才打造好并输出的路由

// ...

app.use("/api", registerRouter); // 使用中间件 api为base url

这样我们就做好注册的接口: localhost:3000/api/register