express路由

58 阅读2分钟

express 路由是 Express 框架的核心功能之一,用于定义应用程序的端点(URI)以及如何响应客户端请求。路由决定了当客户端请求特定路径时,服务器应该执行什么操作。

  • 路由的基本结构
const express = require('express');
const app = express();

app.METHOD(PATH, HANDLER);

示例

const express = require("express");
const router = express.Router();

router.get("/", (req, res) => {
    res.send("分页获取学生");
});

router.get("/:id", (req, res) => {
    res.send("获取单个学生");
});

router.post("/", (req, res) => {
    res.send("添加一个学生");
});

router.delete("/:id", (req, res) => {
    res.send("删除一个学生");
});

router.put("/:id", (req, res) => {
    res.send("修改一个学生");
});
module.exports = router;

使用

app.use("/api/student",require("./api/student"));

改进,完整业务逻辑

const express = require("express");
const router = express.Router();
const stuServ = require("../../services/studentService");
const {asyncHandler} = require("../getSendResult")
//api响应
const sendMsg = require("../getSendResult");
router.get("/", 
    asyncHandler(async (req, res) => {
    const page = req.query.page || 1;
    const limit = req.query.limit || 10;
    const sex = req.query.sex || -1;
    const name = req.query.name || "";
    return await stuServ.getStudents(page, limit, sex, name);
})
);

router.get("/:id", 
    asyncHandler(async (req, res) => {
    return await stuServ.getStudentById(req.params.id);
})
);

router.post(
    "/",
    asynchandler(async (req, res, next) => {
        return await stuServ.addStudent(req.body);
    })
);

router.delete(
    "/:id",
    asynchandler(async (req, res, next) => {
        return await stuServ.deleteStudent(req.params.id);
    })
});

router.put(
    "/:id",
    asynchandler(async (req, res, next) => {
        return await stuServ.updateStudent(req.params.id, req.body);
    })
});
module.exports = router;

api响应

exports.getErr = function(err = "server internal error",errCode = 500){
       return{
           code:errCode,
           msg:err
       }
    }
exports.getResult = function(result){
       return{
           code:0,
           msg:"",
           data:result,
       }
    }
exports.asynchandler = (handler) => {
    return async (req, res, next) => {
        try {
            const result = await handler(req, res, next);
            res.send(exports.getResult(result));
        } catch (err) {
            next(err);
        }
    };
};

studentService

const Student = require("../models/Student");
const { Op } = require("sequelize");
const Class = require("../models/Class");
const validate = require("validate.js");
const moment = require("moment");
const { pick } = require("../util/propertyHelper");
const {Op} = require("sequelize")
exports.addStudent =async function (stuObj){
  //挑选属性
  stuObj=pink(stuObj,"name","birthday","sec","mobile","ClassId");
   //自定义规则
   validata.validators.classExits = async function(value){
    const c =await Class.findByPk(value)
    if(c){
      return;
    }
    return "班级不存在";
   }
  const rule ={
    //验证规则
    name:{
      presence:{
        allowEmpty:false
      },
      type:"string",
      length:{
        minimum:2,
        maximum:10
      }
    },
    birthday:{
      presence:{
        allowEmpty:false
      },
      datetime:{
        dateOnly:true,
        earliest:moment.utc().subtract(100,"y"),
        latest:+momnet.utc().subtract(5,"y")
      },
    },
    sec:{
      presence:{
        allowEmpty:false
      },
    },
    mobile:{
      presence:{
        allowEmpty:false
      },
      format:{
        pattern:/^1\d{10}/
      }
    },
    ClassId:{
      presence:true,
      // //严格
      // type:"integer",
      //不严格
      numericality:{
        onlyInteger:true,
        strict:false,
      },
      classExits:true
   }
  };
  await validate.async(stuObj,rule);
   const ins = await Student.create(stuObj);
   return ins.toJSON();
} 
exports.getStudents = async function (page = 1, limit = 10,sex = -1,name=""){
  const condition ={};
  if(sex !==-1){
    where.sex = !!sex;
  };
  if(name){
    where.name = {
      [Op.like]:`%${name}%`,
    };
  }
  const result = await Student.findAndCountAll({
  //限制查询数据
  attributes:["id","name","sex","birthday"];
  where,
  offset:(page-1)*limit,
  limit:+limit,
  });
  return {
     total:result.count,
     datas:JSON.parse(JSON.stringify(results));
  };
};
exports.addStudent = async function (stuObj) {
    stuObj = pick(stuObj, "name", "birthday", "sex", "mobile", "ClassId");
    validate.validators.classExists = async function (value) {
    };

    const rule = {
    };
    await validate.async(stuObj, rule);
    const ins = await Student.create(stuObj);
    return ins.toJSON();
};

exports.deleteStudent = async function (id) {
    return await Student.destroy({
        where: {
            id,
        },
    });
};
exports.updateStudent = async function (id, obj) {
    return await Student.update(obj, {
        where: {
            id,
        },
    });
};

exports.getStudentById = async function (id) {
    const result = await Student.findByPk(id);
    if (result) {
        return result.toJSON();
    }
    return null;
};