get/post/... 和使用有什么区别
What is the difference between get/post/... and use
全部:
我是 Express 4 路由器的新手。
当我尝试一些 login/signup 示例时,我遇到了一个关于 .use 和 .get/.post 函数的问题:
我看到它有时使用:
var express = require('express');
var router = express.Router();
router.get('/hello', function(req, res, next) {
res.send("Welcome");
});
在主应用程序中,我们像这样使用它:
app.use("/", router);
而其他时候,它使用:
var express = require('express');
var router = express.Router();
//here the router uses .use() function rather than .get/.post
router.use('/hello', function(req, res, next) {
res.send("Welcome");
});
在主应用程序中,我们像这样使用它:
app.use("/", router);
所以我想知道它们之间有什么区别,.use() 只是所有 get/post/put/... 的总称吗?
我找到这个 post:Difference between app.use and app.get in express.js
但是还是觉得不太好理解....
谢谢
.use
用于2种情况,中间件和"modular mountable route handlers".
在你的例子中
router.use('/hello', function(req, res, next) {
res.send("Welcome");
});
这意味着发送到 /hello
的任何请求都将以 "Welcome" 终止,并且不会调用附加到 /hello
的实际 .get
。
所以,总之,当你需要应用一些通用的中间件或者想用路由器做模块化架构时,就调用use
。 use
可以 "used" 作为请求处理程序,但你不应该这样做,因为它不是为此目的而设计的
除了 Jonathan Lonowski 在帖子 link 中所说的之外,不将 use
与 get
和 post
进行比较可能会有所帮助,但将其与all
因为 all
和 use
都可以工作,而不管使用的 HTTP 谓词如何,而对于 get
显然不是这样。如果将 "all" 替换为 "get",我要说的一切都适用,它只会将该处理程序缩小到特定的 HTTP 动词。
那么,all
和 use
有什么区别?
app.all 将处理指定 URL 路径的传入请求,而不管 HTTP 动词,就像 app.use
一样。但是,它将请求的 URL 与处理程序进行比较的方式不同。例如:
var r = express.Router();
r.use('/foo', function (...) { ... }); // Route A
r.all('/bar', function (...) { ... }); // Route B
如果您向 /foo/123
路由 A 发出请求, 将成为 运行。
但是,如果您提出请求,/bar/123
路线 B 将不会 成为 运行。
这是因为 HTTP verbs express 比较 完整路径 ,但是 'use' 它只关心 [=93] 的 开头=]。因为 URL /foo/123
以 /foo
开头,路由 A 会 运行,但是因为 /bar/123
不匹配 FULL URL,所以路由 B 不会是。注意:您可以使 .all
以相同的方式运行:r.all('/bar/*', ...)
,但 use
更容易也更适合此操作。
因此,您倾向于使用一个与另一个安装的是不同的。例如:
var app = express();
var router1 = express.Router();
var router2 = express.Router();
router2.all('*', function (req, res) { ... }); // Must specify a path!
router1.use('/secondary-routes', router2); // Can't do this with all.
app.use(router1); // Look Ma, no path!
在这里,我使用 all
来处理传入的请求,我使用 use
来安装整个路由器。另外,请注意 router.METHOD
函数的使用需要一个 URL 字符串作为第一个参数,而 use
则不需要。
一天结束时,如果您:
- 想要在给定路径下进入的所有请求(甚至每个请求)都使用指定的中间件,或者
- 想要挂载整个子router/application,或者
- 想要在您的应用程序中包含一个插件
...那么use
大概就是你想要的。
如果你:
- 正在特定 URL 路径处理特定请求(即可能没有在 URL 中进行 * 匹配)
- 通常不会调用
next
,而是实际处理请求
...那么 HTTP 动词方法(如 get
、post
或 all
)可能就是您想要的。
全部:
我是 Express 4 路由器的新手。
当我尝试一些 login/signup 示例时,我遇到了一个关于 .use 和 .get/.post 函数的问题:
我看到它有时使用:
var express = require('express');
var router = express.Router();
router.get('/hello', function(req, res, next) {
res.send("Welcome");
});
在主应用程序中,我们像这样使用它:
app.use("/", router);
而其他时候,它使用:
var express = require('express');
var router = express.Router();
//here the router uses .use() function rather than .get/.post
router.use('/hello', function(req, res, next) {
res.send("Welcome");
});
在主应用程序中,我们像这样使用它:
app.use("/", router);
所以我想知道它们之间有什么区别,.use() 只是所有 get/post/put/... 的总称吗?
我找到这个 post:Difference between app.use and app.get in express.js
但是还是觉得不太好理解....
谢谢
.use
用于2种情况,中间件和"modular mountable route handlers".
在你的例子中
router.use('/hello', function(req, res, next) {
res.send("Welcome");
});
这意味着发送到 /hello
的任何请求都将以 "Welcome" 终止,并且不会调用附加到 /hello
的实际 .get
。
所以,总之,当你需要应用一些通用的中间件或者想用路由器做模块化架构时,就调用use
。 use
可以 "used" 作为请求处理程序,但你不应该这样做,因为它不是为此目的而设计的
除了 Jonathan Lonowski 在帖子 link 中所说的之外,不将 use
与 get
和 post
进行比较可能会有所帮助,但将其与all
因为 all
和 use
都可以工作,而不管使用的 HTTP 谓词如何,而对于 get
显然不是这样。如果将 "all" 替换为 "get",我要说的一切都适用,它只会将该处理程序缩小到特定的 HTTP 动词。
那么,all
和 use
有什么区别?
app.all 将处理指定 URL 路径的传入请求,而不管 HTTP 动词,就像 app.use
一样。但是,它将请求的 URL 与处理程序进行比较的方式不同。例如:
var r = express.Router();
r.use('/foo', function (...) { ... }); // Route A
r.all('/bar', function (...) { ... }); // Route B
如果您向 /foo/123
路由 A 发出请求, 将成为 运行。
但是,如果您提出请求,/bar/123
路线 B 将不会 成为 运行。
这是因为 HTTP verbs express 比较 完整路径 ,但是 'use' 它只关心 [=93] 的 开头=]。因为 URL /foo/123
以 /foo
开头,路由 A 会 运行,但是因为 /bar/123
不匹配 FULL URL,所以路由 B 不会是。注意:您可以使 .all
以相同的方式运行:r.all('/bar/*', ...)
,但 use
更容易也更适合此操作。
因此,您倾向于使用一个与另一个安装的是不同的。例如:
var app = express();
var router1 = express.Router();
var router2 = express.Router();
router2.all('*', function (req, res) { ... }); // Must specify a path!
router1.use('/secondary-routes', router2); // Can't do this with all.
app.use(router1); // Look Ma, no path!
在这里,我使用 all
来处理传入的请求,我使用 use
来安装整个路由器。另外,请注意 router.METHOD
函数的使用需要一个 URL 字符串作为第一个参数,而 use
则不需要。
一天结束时,如果您:
- 想要在给定路径下进入的所有请求(甚至每个请求)都使用指定的中间件,或者
- 想要挂载整个子router/application,或者
- 想要在您的应用程序中包含一个插件
...那么use
大概就是你想要的。
如果你:
- 正在特定 URL 路径处理特定请求(即可能没有在 URL 中进行 * 匹配)
- 通常不会调用
next
,而是实际处理请求
...那么 HTTP 动词方法(如 get
、post
或 all
)可能就是您想要的。