在app.use()节点js表达之后如何调用app.get()?将请求从app.use()传递到app.get()

时间:2020-10-15 13:44:08

标签: node.js express node-modules

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

app.use('/', (req, res,next) => {
        res.send('Bid Request GET');
});

app.get('/', (req, res) => {
    res.send('Bid  T');

});

app.listen(3000, () => console.log('app listening on port 3000!'))

我是Node js的初学者。当我运行代码时,它仅显示app.use()响应,而不显示app.get()响应。

我很困惑。我也尝试过next()方法,但是没有用。该如何解决?

1 个答案:

答案 0 :(得分:2)

这背后的主要原因是因为您已经在此处发送了响应:

app.use('/', (req, res,next) => {
    res.send('Bid Request GET');
});

每个请求只能发送一个回复。 每个app.use中间件都是可以访问请求,响应和下一个参数的功能。调用下一个函数时,它将在当前中间件之后执行中间件。

您还可以通过在请求或响应中创建变量来将数据从一种中间件传递到另一种中间件。对于Ex。

app.use('/', (req, res, next) => {
    if(req.body.token !== 'abc') return res.sendStatus(503)
    let someData = () => { .... SomeFunctionCode ... }
    req.myVarible = someData // or res.myVariable = someData or anything
    next()
})

但是推荐的传递值的方法是通过res.locals.myVariable

以下是完整示例:

app.use('/', (req, res, next) => {
    if(req.body.token !== 'abc') return res.sendStatus(503)
    let someData = () => { .... SomeFunctionCode ... }
    req.locals.myVarible = someData 
    next()
})

app.get('/', (req, res) => {
    res.send(res.locals.myVariable)
})