我的应用程序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中获取它,以便进行进一步的验证。
答案 0 :(得分:1)
将其分配给req
。您将可以通过所有中间件访问相同的请求和响应对象。
请注意,next('test')
不会不响应客户端,或者至少不是故意的。它旨在处理错误。在没有错误处理程序且处于开发模式的情况下,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) {} );