如何在 Node.js / Express.js 中将中间件放在它自己的文件中

Posted

技术标签:

【中文标题】如何在 Node.js / Express.js 中将中间件放在它自己的文件中【英文标题】:How to put middleware in it's own file in Node.js / Express.js 【发布时间】:2013-02-04 04:21:57 【问题描述】:

我是整个 Node.js 的新手,所以我仍在尝试了解事物是如何“连接”的。

我正在尝试使用express-form 验证。根据你可以做的文档

app.post( '/user', // Route  
  form( // Form filter and validation middleware
    filter("username").trim()
  ),

  // Express request-handler gets filtered and validated data
  function(req, res)
    if (!req.form.isValid) 
      // Handle errors
      console.log(req.form.errors);

     else 
      // Or, use filtered form data from the form object:
      console.log("Username:", req.form.username);

    
  
);

在 App.js 中。但是,如果我输入 app.get('/user', user.index); 之类的内容,我可以将控制器代码放在单独的文件中。我想对验证中间件做同样的事情(或将验证代码放在控制器中),以便在我开始添加更多页面后更容易查看 App.js 文件。

有没有办法做到这一点?

基本上我想写app.get('/user', validation.user, user.index);之类的东西

【问题讨论】:

【参考方案1】:

这是您定义路线的方式:

routes.js:

module.exports = function(app)
    app.get("route1", function(req,res)...)
    app.get("route2", function(req,res)...)

这是您定义中间件的方式:

middlewares.js:

module.exports = 
    formHandler: function(req, res, next)...

app.js:

// Add your middlewares:
middlewares = require("middlewares");
app.use(middlewares.formHandler);
app.use(middlewares...);

// Initialize your routes:
require("routes")(app)

另一种方法是使用您的中间件每条路线

routes.js:

middlewares = require("middlewares")
module.exports = function(app)
    app.get("route1", middlewares.formHandler, function(req,res)...)
    app.get("route2", function(req,res)...)

希望我能回答你的问题。

【讨论】:

这是我所追求的每条路线的方法。感谢您的广泛解释 在这个例子中,是否有一个单行来应用 app.js 中的所有 middlewares.js? 在学习 node.js 的几天后,只回答/解释对我有意义的主题。太棒了。【参考方案2】:

您可以将中间件函数放入一个单独的模块中,就像控制器函数一样。它只是一个带有适当参数集的导出函数。

因此,如果您有一个validation.js 文件,您可以将您的user 验证方法添加为:

exports.user = function (req, res, next) 
  ... // validate req and call next when done
;

【讨论】:

是的,“适当的参数集”是诀窍 :) 我还没有完全掌握导出/需求关系

以上是关于如何在 Node.js / Express.js 中将中间件放在它自己的文件中的主要内容,如果未能解决你的问题,请参考以下文章

如何启用调试 express.js/node.js 应用程序

如何在超级终端中停止运行 Node.js (Express) 服务器

如何使用 Express JS/Railway JS (Node.JS) 生成 JSON

每次在 Node.js (Express.js) 中发出 API 请求之前,如何简化 Fetching Auth token?

如何使用 node.js 在 express.js 上使用 twitter api 显示最后 20 条推文?

在 Node.js/Express.js 中,如何将 JSON 对象从服务器传输到客户端?