一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第7天,点击查看活动详情。
前言
这片文章是我前两篇文章的续篇,如有疑惑的地方可以,看看我前两篇的文章,本文的主要内容是,注册接口的完善,对密码的格式验证和加密,koa中间件的使用。
现有目录
现有接口代码
service/user.service.js
const connection = require('../app/database')
class UserService {
async create (user) {
console.log("service")
// 将用户数据保存到数据库中
const { name, password } = user
console.log(name, password)
const statement = `INSERT INTO users (name, password) VALUES (?,?);`
const result = await connection.execute(statement, [name, password])
return result
}
}
module.exports = new UserService()
controller/user.controller.js
const userService = require('../service/user.service')
class UserController {
async create (ctx, next) {
// 获取用户请求的数据
const user = ctx.request.body
console.log(user)
try {
// 查询数据
const result = await userService.create(user)
// 返回数据
ctx.body = result
} catch (error) {
ctx.body = "数据库错误"
console.log(error)
}
}
}
module.exports = new UserController()
router/user.router.js
const Router = require("koa-router")
const userRouter = new Router({ prefix: "/user" })
const { create } = require('../controller/user.controller')
userRouter.post('/', create)
module.exports = userRouter
可以看到现在的接口只是简单的获取前端传进来的数据,然后调用sql语句把数据写入数据库,中间没有做任何的处理。接下来需要,判断前端传进来的值是否为空,判断数据库中是否已有该用户,给用户密码进行md5加密保存。
开始完善接口
创建用于存放中间件的文件夹
(1)非空判断
// user.middleware.js
const verifyUser = async (ctx, next) => {
let { name, password } = ctx.request.body // 获取数据
name = name.replace(/\s/g, '')
password = password.replace(/\s/g, '')
if (!name || !password || name === '' || password === '') { // 非空判断
ctx.body = "信息不能为空"
return
}
await next()
}
module.exports = {
verifyUser
}
中间件其实就是一个函数,中间件写好了,接下来就是使用中间件。
// user.router.js
const Router = require("koa-router")
const { verifyUser } = require("../middleware/user.middleware")
const userRouter = new Router({ prefix: "/user" })
const { create } = require('../controller/user.controller')
// 使用中间件
userRouter.post('/', verifyUser, create)
module.exports = userRouter
在create方法前,我们使用了verifyUser中间件。
(2)判断数据库中是否已有该用户
创建查询用户的查询语句
const connection = require('../app/database')
class UserService {
// 创建用户
async create (user) {
const { name, password } = user
console.log(name, password)
const statement = `INSERT INTO users (name, password) VALUES (?,?);`
const result = await connection.execute(statement, [name, password])
return result
}
// 根据用户名查询
async getUserByName (name) {
console.log("准备查询")
const statement = `SELECT * FROM users where name = ?;`
const result = await connection.execute(statement, [name])
return result[0]
}
}
module.exports = new UserService()
调用查询语句
const { getUserByName } = require("../service/user.service")
const verifyUser = async (ctx, next) => {
let { name, password } = ctx.request.body // 获取数据
name = name.replace(/\s/g, '')
password = password.replace(/\s/g, '')
if (!name || !password || name === '' || password === '') { // 非空判断
ctx.body = "信息不能为空"
return
}
// 判断是否有该用户
const result = await getUserByName(name)
if (result.length == 0) {
ctx.body = "该用户名可以注册"
} else {
ctx.body = "该用户已经注册"
return
}
await next()
}
module.exports = {
verifyUser
}
写在最后
至此,文章就分享完毕了,欢迎在评论区交流。
如果文章对你有所帮助,不要忘了点上宝贵的一赞!
听说点赞的人运气都不差,相信来年第一个升职加薪的一定是你~