0

正如标题所说。我需要从另一条路线调用一条路线。

我使用了 run-middleware npm 模块,但在使用之后 Morgan 显示了奇怪的输出,比如显示两个 http 请求,但两者都是相同的。访问无效路线也不会捕获所有路线。相反,它的抛出错误。这是一个日志。

data:    app/server.js:29146 - ======================================
data:    app/server.js:29146 - 200
data:    app/server.js:29146 - <!DOCTYPE html>
data:    app/server.js:29146 - <html lang="en">
data:    app/server.js:29146 - <head>
data:    app/server.js:29146 - <meta charset="utf-8">
data:    app/server.js:29146 - <title>Error</title>
data:    app/server.js:29146 - </head>
data:    app/server.js:29146 - <body>
data:    app/server.js:29146 - <pre>Cannot POST /api/v1/auth/authenticate</pre>
data:    app/server.js:29146 - </body>
data:    app/server.js:29146 - </html>
data:    app/server.js:29146 - ======================================
data:    app/server.js:29146 - POST /api/v1/auth/authenticate - - ms - -
data:    app/server.js:29146 - POST /api/v1/auth/authenticate 200 474.491 ms - 268

我在 /asd 路由无效的地方使用了以下代码

req.runMiddleware('/asd',{method:'post'},function(code,data){
    console.log('======================================');
    console.log(code);
    console.log(data);
    console.log('======================================');
});

是否有任何其他图书馆为此目的?

或者任何人都可以帮助我创建自己的?我知道如何制作中间件以及如何调用express的中间件链,我只想知道req对象的哪些字段需要更改和恢复。

4

1 回答 1

0

我无法准确说出您的要求,因为您没有在尝试调用另一条路线的位置显示代码。

如果您在一个路由处理程序中并且想要调用另一个路由处理程序的逻辑,则有几种选择:

  1. 将公共代码提取到两个路由处理程序都可以执行的函数中。因此,您可以从任一路由处理程序调用公共代码。出于某种原因,人们似乎忘记了路由处理程序可以像所有其他 Javascript 函数一样被纳入共享代码。

  2. 返回一个 302 重定向来告诉调用者重定向到另一个路由。然后它将请求其他路由和该路由处理程序可以处理事情。

  3. 向您自己的服务器发出 http 请求以获取其他路由的结果,然后在此路由中使用该结果。

通常选项 1 是最好的方法,因为它涉及的开销最少。

你真的不想去尝试编造你自己的东西reqres你可以欺骗表达为你做某事的对象。req只需将 express 完全排除在等式之外,并将共享代码分解为独立于and的单独函数res。将所需的输入传递给共享函数并返回结果,然后让每个路由分别处理自己的reqres。或者,如果您希望它们对reqand进行相同的操作res,您可以将它们直接传递给共享函数并让它直接对它们进行操作。

于 2017-09-27T20:24:05.413 回答