Nodejs 如何将参数从另一条路由传递到导出的路由?

Nodejs how to pass parameters into an exported route from another route?

假设我在 route1.js 中模块导出“/route1”,我如何将参数从 route2.js 中定义的“/route2”传递到此路由?

route1.js

module.exports = (app) => {
    app.post('/route1', (req,res)=>{
         console.log(req.body);
    });
}

route2.js

const express = require('express');
const app = express();
//import route1 from route1.js
const r1 = require('./route1')(app);

app.post('/route2', (req, res) => {

   //how to pass parameters?
   app.use(???, r1) ?
})

简而言之,路线1的输出取决于路线2的输入。

您不会将参数从一条路线传递到另一条路线。每个路由都是一个单独的客户端请求。 http 本身是无状态的,每个请求都是独立的。

如果您描述您要解决的 real-world 实际问题是什么,我们可以帮助您使用各种工具来管理 http 中从一个请求到下一个请求的状态服务器。但是,我们真的需要知道真实世界的问题是什么才能知道最好的建议。

可用的通用工具有:

  1. 将 cookie 设置为第一个响应的一部分,并在 cookie 中包含一些数据。在从该客户端发送的下一个请求中,先前的 cookie 将与其一起发送,以便服务器可以看到该数据是什么。

  2. 创建一个server-sidesessionobject(可能使用express-session)并在sessionobject。在第二个请求中,您可以访问 session object 以获取先前设置的数据。

  3. Return 在第一个请求中将数据发送给客户端,并让客户端在第二个请求中通过查询字符串或表单字段或自定义 headers 发送回该数据.这将是在服务器上做事的真正无状态方式。任何需要的状态都保存在客户端中。

哪个选项会带来最佳设计,完全取决于您实际要解决的问题。


仅供参考,您永远不会像您在问题中显示的那样将一条路线嵌入另一条路线:

app.post('/route2', (req, res) => {

   //how to pass parameters?
   app.use(???, r1) ?
})

这样做是安装一个新的 app.use() 永久副本,每次您的 app.post() 路由被访问时,它对所有传入请求都有效。他们会永远积累。