Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.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 节点快车:路径总是可选的吗?_Node.js_Express - Fatal编程技术网

Node.js 节点快车:路径总是可选的吗?

Node.js 节点快车:路径总是可选的吗?,node.js,express,Node.js,Express,根据for express,path参数对于是可选的,因此要将中间件应用于任何传入请求,您可以编写: app.use(function (req, res, next) { res.send('ANY request'); next(); }); 但是对于path,参数显然不是可选的,因此要将中间件应用于任何传入的GET请求,您必须编写: app.get('/', function (req, res, next) { res.send('GET request'); next

根据for express,path参数对于是可选的,因此要将中间件应用于任何传入请求,您可以编写:

app.use(function (req, res, next) {
  res.send('ANY request');
  next();
});
但是对于path,参数显然不是可选的,因此要将中间件应用于任何传入的GET请求,您必须编写:

app.get('/', function (req, res, next) {
  res.send('GET request');
  next();
});
但我发现,如果我真的错过了这条路,它不会抱怨:

app.get(function (req, res, next) {
  res.send('GET request');
  next();
});
那么,上述两个定义是等价的,还是第二个定义与第一个定义有所不同

我也不确定将/或*指定为路径之间的区别:

app.get(function (req, res, next) {
  res.send('GET request');
  next();
});

总之,app.get'/',fn和app.get'*',fn和app.getfn之间有什么区别吗?

有些令人困惑的是,有两种方法叫做app.get:

一个与app.set相反,另一个用于处理GET请求。实际上,JS只允许一个方法,因此内部Express会检查传递了多少个参数,以确定您指的是哪一个:

因此,虽然使用app.getfn可能不会抱怨,但它实际上不会作为一个路由工作,因为它会将其视为get的另一种形式

app.get“*”和。。。和app.get“/”。。。是*将匹配任何路径,而/将仅匹配精确路径/仅此而已。这与app.use不同,app.use将路径视为“以开始”


您可能会发现我在这里给出的答案有助于理解get和use之间的路径差异:。

谢谢。我看到了另一个单参数app.get,但我认为,通过在函数顶部进行一些类型检查,它可能会区分传入的字符串和函数,并将后者视为一个全面的路由。。。相当于app.get'*',fn。。。但事实并非如此?至于*和/我之间的区别,app完全偏离了轨道。使用where,就像你说的,/被视为“开始于”。。。非常令人困惑的是,它与app.get“/”不同,fn!app.get、app.post等都以相同的方式工作,它们都需要路径。如果您通读源代码,您将看到它们都只是传递到一个内部路由器,该路由器使用路径调用router.route。没有应用默认路径。我想部分原因是因为没有一个特别好的默认路径选择。对于中间件app.use,默认为“所有内容”是有意义的,但对于使用app.get注册的路由等,要匹配“所有内容”则不太常见。我同意如果app.get进行类型检查会很有帮助。