在 Node.js 中,当有多个中间件函数被注册到同一个路由或应用程序时,请求对象(req)和响应对象(res)会在中间件函数之间共享。这意味着在一个中间件函数中可以对请求对象或响应对象进行修改或添加属性,这些修改或属性可以在后续的中间件函数或路由处理程序中访问和使用。
以下是一个示例,展示多个中间件之间共享请求对象和响应对象:
const express = require('express'); const app = express();
// 定义第一个中间件 app.use((req, res, next) => { console.log('第一个中间件处理程序被调用');
// 在请求对象中添加一个属性 req.foo = 'Hello from req.foo!';
// 在响应对象中添加一个属性 res.bar = 'Hello from res.bar!';
next(); // 调用 next 函数以进行下一个中间件或路由处理程序 });
// 定义第二个中间件 app.use((req, res, next) => { console.log('第二个中间件处理程序被调用');
// 访问请求对象中添加的属性 console.log(`req.foo: ${req.foo}`);
// 访问响应对象中添加的属性 console.log(`res.bar: ${res.bar}`);
next(); // 调用 next 函数以进行下一个中间件或路由处理程序 });
// 定义一个路由处理程序 app.get('/user', (req, res) => { console.log('路由处理程序被调用');
// 在路由处理程序中访问请求对象中添加的属性 console.log(`req.foo: ${req.foo}`);
// 在路由处理程序中访问响应对象中添加的属性 console.log(`res.bar: ${res.bar}`);
res.send('User page.'); });
app.listen(80, () => { console.log('Server is running on port 80'); });
在这个示例中,我们定义了两个中间件函数和一个路由处理程序。在第一个中间件函数中,我们向请求对象添加了一个属性 req.foo
,并向响应对象添加了一个属性 res.bar
。然后,在第二个中间件函数中,我们访问了这些属性,并在控制台中输出它们的值。最后,在路由处理程序中,我们再次访问了这些属性并输出它们的值。当有多个中间件函数被注册到同一个路由时,它们可以共享请求对象和响应对象。