【问题标题】:How to call app.get() after app.use() node js express? Pass request from app.use() to app.get()app.use() node js express后如何调用app.get()?将请求从 app.use() 传递给 app.get()
【发布时间】:2020-10-16 00:34:41
【问题描述】:
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() 方法,但没有用。如何解决?

【问题讨论】:

  • 你可以尝试在第一个app.use设置你的响应头,然后使用res.write写入第一个块,调用next将请求传递给app.get并再次使用@ 987654328@

标签: node.js express node-modules


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 好答案!我只想补充一些进一步的说明。这两种方式的区别在于app.get只适用于GET请求,而app.use适用于所有请求类型。我还想澄清一下app.get 也接受下一个参数。
  • 精彩的解释!我只是想提一下 req.locals.myVarible = someData 应该用 res.locals.myVarible = someData 更改的错字
猜你喜欢
  • 2017-11-16
  • 2013-03-14
  • 1970-01-01
  • 2015-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多