Node.js中Express框架连接Mysql实现用户注册接口
处理用户注册接口简单分为三步:
1、注册校验
2、完善逻辑
3、拆分模块
拆分模块能够使部分功能能够复用,封装好各个模块使得模块间只能通过有限的接口互相访问,从而降低耦合,拆分模块使得前期提升开发效率,后期维护更加方便
目前目录如下
app中config.js用来写配置文件,database是配置数据库
controller是集成业务逻辑
middleware 是集成中间件
router为路由
services为集中sql函数
目录
安装的包为express,mysql2,nodemon
app.js
const express = require("express")
const app = express()
// 引入配置文件
const {APP_PORT} = require("./app/config")
//连接数据库
require("./app/database")
//解析post请求参数
app.use(express.json()) //解析json格式
app.use(express.urlencoded()) //解析form表单格式
const router = require("./router")
app.use(router)
app.listen(APP_PORT, () => {
console.log(`服务器启动成功 http://localhost:${APP_PORT}`);
})
router中的app.js
const express = require("express")
const router = express.Router()
// 中间件
const {verfyRegister} = require("../middleware/app-middleware")
// 控制器
const {handleRegister} = require("../controller/app-controller")
//用户注册
router.post("/register",verfyRegister,handleRegister)
router.post("/login",(req,res)=> {
res.json({
code: 200,
msg: "注册成功"
})
})
module.exports = router
router中的index.js
const express = require("express")
const router = express.Router()
router.use("/sys",require('./app'))// /sys是前缀 可以通过use加
router.use(require('./user'))
module.exports = router
//index.js文件是将其他接口总结起来,方便调用
router中的user,js
const express = require("express")
const router = express.Router()
router.get("/user",(req,res)=> {
res.json({
code: 200,
msg: "成功",
data:{
username:"zhangsan",
email:"110@163.com"
}
})
})
module.exports = router
controller
const { insertUserByUsername } = require("../services/app-services")
class appController {
// 处理注册的业务逻辑
async handleRegister (req, res) {
// 1、获取前端传过来的数据
// 2、校验注册信息是否存在,不存在return
// 3、从数据库校验用户是否注册过
// 4、保存进数据库
const { username, password, tel } = req.body
try {
await insertUserByUsername(username, password,tel)
res.json({
code: 200,
msg: "注册成功"
})
} catch (error) {
res.status(500).send("服务器出问题了")
}
}
}
//appController是一个类,所以需要new一个实例对象出来
module.exports = new appController()
middleware
const { getUserByUsername } = require("../services/app-services")
//校验注册的中间件
const verfyRegister = async (req, res, next) => {
const { username, password, tel } = req.body
if (!username || !password || !tel) {
res.status(401).json({
code: '-1',
msg: "用户名和密码和手机号必填"
})
return
}
try {
//查询数据库,查询用户在数据库中是否存在
const dbRes = await getUserByUsername(username, password)
if (dbRes.length !== 0) {
res.send({
code: '-1',
msg: "该用户已注册,请登录"
})
return
}
} catch (error) {
res.status(500).send("服务器出问题了")
return
}
next()
}
module.exports = {
verfyRegister
}
app中的config.js
const config = {
//端口号
APP_PORT: 3309,
//mysql配置
MYSQL_host: "localhost",
MYSQL_user: "root",
MYSQL_password: "你的密码",
MYSQL_port: 你的端口号,
MYSQL_database: "你的数据库名称",
MYSQL_waitForConnections: true,
MYSQL_connectionLimit: 10,
MYSQL_queueLimit: 0,
}
module.exports = config
app中的database.js
const mysql = require("mysql2")
const { MYSQL_host, MYSQL_user,MYSQL_password,MYSQL_port, MYSQL_database, MYSQL_waitForConnections, MYSQL_connectionLimit, MYSQL_queueLimit } = require("./config")
const connections = mysql.createPool({
host: MYSQL_host,
user: MYSQL_user,
password: MYSQL_password,
port:MYSQL_port,
database: MYSQL_database,
waitForConnections: MYSQL_waitForConnections,
connectionLimit: MYSQL_connectionLimit,
queueLimit: MYSQL_queueLimit,
})
connections.getConnection(function (err, conn) {
conn.connect((err) => {
if (err) {
console.log("连接失败", err);
} else {
console.log("数据库连接成功~");
}
});
})
module.exports = connections.promise()