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