所有
我是Express 4路由器的新手。
当我尝试一些登录/注册示例时,我遇到了一个关于.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 / ...的通用名称吗?
我发现这篇文章:Difference between app.use and app.get in express.js
但是仍然不容易理解这个....
由于
答案 0 :(得分:5)
除了Jonathan Lonowski在发布的链接中所说的内容之外,将use
与get
和post
进行比较可能会有所帮助,但要将其与all
进行比较,因为无论使用哪个HTTP动词,all
和use
都可以正常工作,而get
显然不是这样。如果您更换所有"所有"我要说的一切都适用。使用" get",它只是将该处理程序缩小到特定的HTTP动词。
那么,all
和use
之间的区别是什么?
app.all都将处理指定URL路径上的传入请求,就像app.use
那样。但是,它如何将请求的URL与处理程序进行比较是不同的。例如:
var r = express.Router();
r.use('/foo', function (...) { ... }); // Route A
r.all('/bar', function (...) { ... }); // Route B
如果您向/foo/123
路线提出请求将运行。
但是,如果您提出请求,则/bar/123
路线B 将不会
这是因为HTTP动词express比较完整路径,但是使用'使用'它只关心URL的开头。由于网址/foo/123
以/foo
开头,因此路由A将会运行,但由于/bar/123
与FULL网址不匹配,因此路由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
则不需要。{/ p>
在一天结束时,如果你:
...然后use
可能就是你想要的。
如果你:
next
而实际上会处理请求 ...然后HTTP动词方法(如get
,post
或all
)可能就是您想要的。
答案 1 :(得分:1)
.use
用于2个案例,中间件和"模块化可安装路由处理程序"。
在你的例子中
router.use('/hello', function(req, res, next) {
res.send("Welcome");
});
这意味着发送给/hello
的所有请求都将以"欢迎"并且不会调用附加到.get
的实际/hello
。
因此,简而言之,当您需要应用一些通用中间件或想要使用路由器进行模块化架构时,请调用use
。 use
可以"使用"作为请求处理程序,但你不应该因为它不是为那个目的设计的