如何从另一个中间件获取数据?

时间:2019-08-15 20:38:21

标签: javascript node.js callback middleware

我的应用程序get请求具有两个中间件功能,它们运行正常。

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

function fun1 (req, res, next) {
    console.log('this is fun1')
    next()
}

function fun2 (req, res, next) {
   console.log('this is fun2')
   next()
}

app.get('/', fun1, fun2, function (req, res, next) {
   res.send('User Info')
})
app.listen(8080, () => console.log(`Listening on port 8080!`))

现在,如果我尝试在next('test')中执行fun1,那么它将绕过fun2并在浏览器窗口中而不是正确的'test'上输出'User Info'。但是,如何获取fun2中的数据?我需要从fun1传递一些东西,并在fun2中获取它,以便进行进一步的验证。

2 个答案:

答案 0 :(得分:1)

将其分配给req。您将可以通过所有中间件访问相同的请求和响应对象。

请注意,next('test')不会不响应客户端,或者至少不是故意的。它旨在处理错误。在没有错误处理程序且处于开发模式的情况下,Express会在浏览器中显示这些错误。

继续阅读:

Error handling in Express

答案 1 :(得分:0)

您可以通过在键值对上附加req`对象来实现此目的。

现在该怎么做

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

function fun1 (req, res, next) {
    req.MY_VAR = 'MY_VAL';  // setting the value
    console.log('this is fun1')
    next()
}

function fun2 (req, res, next) {
   let myVar = req.MY_VAR; // retrieving the value
   console.log(myVar); // MY_VAL
   console.log('this is fun2')
   next()
}

app.get('/', fun1, fun2, function (req, res, next) {
   res.send('User Info')
})
app.listen(8080, () => console.log(`Listening on port 8080!`))

现在,为什么不使用next()?通常,next()中传递的值将由app.get('/', function (err, req, res, next) {} );

中的错误参数接收