08. next函数

2022-11-01 17:23:10发布
45
const express = require('express');

const server = express();
server.listen(8080);
console.log('server is runing...');

server.use('/', (req, res, next) => {
    req.body = { a: 1, b: 2 };
    next(); // 执行next
});

server.get('/abc', (req, res) => {
    res.send(req.body); // 这里可以访问到上面的use里面的req.body
});

分析

1. 在use函数内,给req对象自定义一个body变量,在下一个get请求中我们也可以获取到这个body变量

2. 在use函数内,只有使用了next,程序才可以继续执下面的请求,不然就卡死这use这里了。

3. 结合上面2个特性,我们可以自己来写一个中间件,例如上一章说的body-parser


自己编写body-parser

myBodyParser.js

const qs = require('querystring');

module.exports = (req, res, next) => {
    let str = '';
    req.on('data', (data) => {
        str += data;
    });
    req.on('end', () => {
        req.body = qs.parse(str);
        next();
    });
}

使用

const express = require('express');
const myBodyParser = require('./myBodyParser'); // 引入

const server = express();
server.listen(8080);

server.use(myBodyParser); // 使用

server.post('/', (req, res) => {
    res.send(req.body);
});

console.log('server is runing...');