0

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

4

1 回答 1

0

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

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

可用的通用工具有:

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

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

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

哪个选项会产生最佳设计完全取决于您实际尝试解决的问题。


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

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

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

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

于 2020-04-05T07:37:23.787 回答