nodejs koa框架项目之编写注册接口

182 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第7天,点击查看活动详情

前言

这片文章是我前两篇文章的续篇,如有疑惑的地方可以,看看我前两篇的文章,本文的主要内容是,注册接口的完善,对密码的格式验证和加密,koa中间件的使用。

现有目录

image.png

现有接口代码

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加密保存。

开始完善接口

创建用于存放中间件的文件夹 image.png

(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
}

写在最后

至此,文章就分享完毕了,欢迎在评论区交流。
如果文章对你有所帮助,不要忘了点上宝贵的一赞!
听说点赞的人运气都不差,相信来年第一个升职加薪的一定是你~