通过expressjs中的代码运行路由

时间:2017-09-27 20:00:02

标签: node.js express 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 route无效

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

为此目的还有其他图书馆吗?

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

1 个答案:

答案 0 :(得分:0)

我无法确切地说出您要问的内容,因为您没有显示您尝试拨打其他路线的代码。

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

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

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

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

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

    你真的不想尝试组建自己的reqres对象,你可以通过这些对象来表达对你做的事情。只需明确表达式,并将共享代码分解为独立于reqres的单独函数。将所需的输入传递给共享函数并返回结果,然后让每条路径分别处理自己的reqres。或者,如果您希望它们在reqres上运行相同,则可以将它们直接传递到共享函数中,并让它直接对它们进行操作。