Node.js如何将参数从其他路由传递到导出的路由?

时间:2020-04-05 03:50:56

标签: express express-router module.exports

假设我在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的输入。

1 个答案:

答案 0 :(得分:0)

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

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

可用的常规工具是:

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

  2. 创建一个服务器端会话对象(可能使用express-session)并在该会话对象中设置一些数据。然后,在第二个请求中,您可以访问会话对象以获取先前设置的数据。

  3. 在第一个请求中将数据返回给客户端,并让客户端在第二个请求中以查询字符串或表单字段或自定义标头将该数据发送回。这将是服务器上真正无状态的处理方式。所有必需的状态都保留在客户端中。

哪种选项可以产生最佳设计,完全取决于您实际上要解决的问题。


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

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

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

这将是安装app.use()的新永久副本,该副本在每次您的app.post()路线被点击时对所有传入请求都有效。他们会永远积累。

相关问题