egg.js

发布时间 2023-07-05 14:20:32作者: NewBee_2023

引入 joi 进行参数校验

按照依赖:

npm install joi

基本使用:

const Joi = require('joi');

const addCatalogSchema = Joi.object({
  catalog: Joi.string().required(),
});

module.exports = {
  addCatalogSchema,
};

//使用
const ctx = this.ctx;
const { catalog } = ctx.request.body;
// 入参校验
await addCatalogSchema.validateAsync({ catalog });
const data = await ctx.model.Catalog.create({ catalog });

引入 jwt

'use strict';
const BaseController = require('./base');

class UserController extends BaseController {

  async login() {
    const { ctx, app } = this;
    // 获取用户端传递过来的参数
    const { username, password } = ctx.request.body;
    const user = await ctx.model.User.findOne({ where: { username } });
    // 进行验证 data 数据 登录是否成功
    if (!user) {
      throw {
        code: 20001,
        message: '用户不存在',
      };
    }
    if (password !== user.password) {
      throw {
        code: 20002,
        message: '密码错误',
      };
    }
    // 生成 token 的方式
    const token = app.jwt.sign({
      userId: user.id, // 需要存储的 token 数据
      // ......
    }, app.config.jwt.secret);
    // 生成的token =

    // 返回 token 到前端
    this.ok(token);
  }
}

module.exports = UserController;

路由:

'use strict';

/**
 * @param {Egg.Application} app - egg application
 */
module.exports = app => {
  const { router, controller, jwt } = app;
  router.get('/', controller.home.index);
  router.post('/login', controller.user.login);
  router.get('/catalog', jwt, controller.catalog.find);
  router.post('/addCatalog', jwt, controller.catalog.create);