一、需求

在 express 中讲业务处理(如数据请求操作)从路由中分离出来。

主要利用路由组链,如下面这种形式:

const express = require('express');
const app = express();

function fun1(req,res,next){
  console.log(1);
  next();
}
function fun2(req,res,next){
  console.log(2)
  next();
}
app.get('/',fun1,fun2,(req,res)=>{
  res.send('end');
});

app.listen(3000);

能够依次执行上面的 fun1fun2

1.jpg

二、实现

模拟一个 db 的查询操作:

  • 文件位置:./db.js

关键点在于,将信息保存在了 req.userInfo 中,这样子在之后的路由处理中依旧能够使用。

/**
 * @name db
 * @description DB操作类
 */
const dbRes = {
  '1':{name:'ptbird'},
  '2':{name:'postbird'}
};

exports.getUserInfoById  =   (req,res,next)=>{
  const info = dbRes[req.params.id];
  if(!info){
    return res.send('404');
  }
  req.userInfo = info;
  next();
}

主文件

  • 文件位置:./app.js
const express = require('express');
// 引入需要的对象
const {getUserInfoById}  = require('./db');

const app = express();
const router = express.Router();
// 路由组链的形式调用API获取数据
router.get('/user/:id',getUserInfoById,(req,res)=>{
  res.send(req.userInfo);
});

app.use(router);
app.listen(3000);