【问题标题】:expressjs, difference on middleware callback useexpressjs,中间件回调使用的区别
【发布时间】:2018-01-20 22:39:15
【问题描述】:

一个简单的 Express 应用:

var express = require('express');
var app = express();
var router = express.Router();

function test (req, res, next) {

}

我正在尝试找出这两种实现方式的区别:

router.use('/myRoute', test)

router.post('/myRoute', function (req, res) {

});

还有:

router.post('/myRoute', test, function (req, res) {
});

我从文档 (https://expressjs.com/en/4x/api.html#middleware-callback-function-examples) 和 (https://expressjs.com/en/4x/api.html#router.use) 中了解到的没有。但这不可能吗?

【问题讨论】:

  • 刚刚进行了编辑,这是一个错字。这是同一条路线。
  • 在这种情况下:use 用于所有 HTTP 动词,post 仅用于 HTTP POST 调用,因此在第一个示例中,test 将针对所有 HTTP 调用运行,无论它们是否're get, post, options, etc. etc. 在第二个中,你设置了一个 only 用于 post 的路由

标签: node.js express


【解决方案1】:

在您作为示例的代码中存在差异:

router.use('/myRoute', test)

这会将“测试”功能应用于 /myRoute 的任何请求(POST、PUT、GET 等)。

此时:

router.post('/myRoute', test, function (req, res) {
});

仅适用于 /myRoute 的 POST 请求。

至于您的问题,不同之处在于您要么将其应用于全局,例如,要么将其仅应用于特定功能。视情况而定,您将使用其中一种。

【讨论】:

  • 第一个示例将触发 start/myRoute,因此/myRoute 以及/myRoute/foo/myRoute/foo/bar 等的请求。
  • 在这两种实现中,中间件函数将在层次结构中的同一级别调用?因为感觉如果我使用 router.use,这是在 router.post 之前调用的。
  • @gelv 你最先声明的会被第一个调用。
  • 中间件按照您声明它们的顺序被调用。无论您选择何种方式声明。
  • 我希望可以问这个问题,但是当我使用 express-bodyparser 和 router.use() 时,它太早进入了该中间件,但是当我在 router.post 中使用中间件时它可以工作()。所以感觉一般 router.use() 比 router.post() 更早被调用。 (在这里查看我的问题:github.com/ctavan/express-validator/issues/379
猜你喜欢
  • 2017-06-09
  • 1970-01-01
  • 1970-01-01
  • 2010-09-26
  • 2017-11-21
  • 2021-04-27
  • 2012-08-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多