根据express
的{{3}},path
参数对于docs是可选的,因此要将中间件应用于任何传入请求,您可以编写:
app.use(function (req, res, next) {
res.send('ANY request');
next();
});
但对于app.use
,path
参数显然不是可选的,因此要将中间件应用于您必须编写的任何传入GET
请求:
app.get('/', function (req, res, next) {
res.send('GET request');
next();
});
但我发现如果我做错过了这条道路,它就不会抱怨:
app.get(function (req, res, next) {
res.send('GET request');
next();
});
那么,上面两个定义是等价的,还是第二个定义与第一个定义不同的东西?
我也不确定将/
或*
指定为path
之间的区别:
app.get('*', function (req, res, next) {
res.send('GET request');
next();
});
总而言之,app.get('/', fn)
与app.get('*', fn)
和app.get(fn)
之间是否存在差异?
答案 0 :(得分:1)
有些令人困惑的是,有两种叫做app.get
的方法:
https://expressjs.com/en/4x/api.html#app.get
一个是与app.set
相反,另一个是处理GET请求的那个。实际上JS只允许一个方法,所以内部Express会检查传递多少个参数来计算你的意思:
因此,虽然使用app.get(fn)
可能不会抱怨,但它实际上不会作为路线工作,因为它会将其视为get
的另一种形式。
app.get('*', ...)
和app.get('/', ...)
之间的区别在于*
将匹配任何路径,而/
只会匹配确切路径/
(仅此而已)。这与app.use
不同,其中路径被视为“以...开头”。
您可能会发现我在此提供的答案有助于了解get
和use
之间路径的差异:Difference between app.use and app.get *in proxying*。