Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js expressjs,中间件回调使用上的差异_Node.js_Express - Fatal编程技术网

Node.js expressjs,中间件回调使用上的差异

Node.js expressjs,中间件回调使用上的差异,node.js,express,Node.js,Express,一个简单的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) { }); 以及: 我从文档()和

一个简单的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.use('/myRoute', test)
这将把“test”功能应用于/myRoute的任何请求(POST、PUT、GET等)

而这:

router.post('/myRoute', test, function (req, res) {
});
将仅应用于发送到/myRoute的POST请求


至于你的问题,区别在于你要么全局应用它,例如,要么只对特定函数应用它。取决于您将使用其中一种的情况。

刚刚做了一次编辑,是打字错误。这是相同的路由。在这种情况下:
use
对所有HTTP谓词起作用,而
post
仅对HTTP post调用起作用,因此在第一个示例中,
test
将对所有HTTP调用运行,而不管它们是get、post、options等。在第二个示例中,您只为POST设置了一个路由。第一个示例将触发以
/myRoute
开头的请求,因此
/myRoute
以及
/myRoute/foo
/myRoute/foo/bar
等都将在层次结构中的同一级别调用中间件功能?因为这感觉就像我使用router.use一样,它在router.post之前被调用。@gelv您首先声明的那个将被首先调用。中间件将按照您声明它们的顺序被调用。无论您选择以何种方式声明。我希望这一点可以问,但当我使用ExpressBodyParser和router.use()时,它进入中间件的时间太早,但当我在router.post()中使用中间件时,它会起作用。所以感觉一般来说,router.use()的调用要早于router.post()。(见我的问题:)
router.post('/myRoute', test, function (req, res) {
});