【问题标题】:Nodejs how to pass parameters into an exported route from another route?Nodejs如何将参数传递到另一个路由的导出路由中?
【发布时间】:2020-04-05 03:50:56
【问题描述】:

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

【问题讨论】:

    标签: express express-router module.exports


    【解决方案1】:

    您不会将参数从一条路由传递到另一条路由。每个路由都是一个单独的客户端请求。 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() 路由时,该副本对所有传入请求都有效。他们将永远积累。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-22
      • 1970-01-01
      • 2017-11-21
      • 2020-11-26
      • 2017-03-12
      • 2018-04-02
      • 1970-01-01
      相关资源
      最近更新 更多