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