我对express和node.js有点陌生,我搞不清楚app.use和app.get之间的区别。看起来你可以同时使用它们来发送信息。例如:
app.use('/',function(req, res,next) {
res.send('Hello');
next();
});
似乎和这个是一样的:
app.get('/', function (req,res) {
res.send('Hello');
});
我对express和node.js有点陌生,我搞不清楚app.use和app.get之间的区别。看起来你可以同时使用它们来发送信息。例如:
app.use('/',function(req, res,next) {
res.send('Hello');
next();
});
似乎和这个是一样的:
app.get('/', function (req,res) {
res.send('Hello');
});
当前回答
除了以上的解释,我所经历的:
app.use('/book', handler);
将匹配所有以“/book”开头的请求。所以它也匹配" /book/1 "或" /book/2 "
app.get('/book')
只匹配精确匹配的GET请求。它不会处理像'/book/1'或'/book/2'这样的url
所以,如果你想要一个全局处理程序来处理你所有的路由,那么app.use('/')是选项。app.get('/')将只处理根URL。
其他回答
每次请求发送到服务器时,都会调用App.use。 唯一的事情是我们应该在处理get, put, post等请求之前调用它
app.use(middleware);
function middleware(req, res, next)
{
console.log("Came in middleware function without arrow");
next();
}
App.get只对给定路径的get请求被调用。
app.get('/myget', myget_function);
function myget_function(req, res)
{
console.log("Came in function myget");
res.send('Hello World! from myget');
}
post只在给定路径的post请求时被调用。
app.post('/mypost', mypost_function);
function mypost_function(req, res)
{
console.log("Came in function mypost");
res.send('Hello World! from mypost');
}
简单的 app.use表示“在所有请求上运行这个” app.get的意思是“在给定URL的GET请求上运行这个”
app.use是Connect (Express所依赖的中间件框架)中的“低级”方法。
以下是我的指导原则:
如果你想公开一个GET方法,请使用app.get。 如果你想添加一些中间件(HTTP请求到达你在Express中设置的路由之前的处理程序),或者如果你想让你的路由模块化(例如,从npm模块中公开一组路由供其他web应用程序使用),请使用app.use。
app.use和app.get的区别:
app.use→它通常用于在应用程序中引入中间件,可以处理所有类型的HTTP请求。
app.get→仅用于处理GET HTTP请求。
现在,app.use和app.all之间有一个混淆。毫无疑问,它们有一个共同点,那就是它们都可以处理所有类型的HTTP请求。 但有一些区别,建议我们使用app.use作为中间件,而app.all用于路由处理。
app.use()→只需要一个回调。 app.all()→它可以接受多个回调。 App.use()将只查看url是否以指定的路径开始。 但是,app.all()将匹配完整的路径。
例如,
app.use( "/book" , middleware);
// will match /book
// will match /book/author
// will match /book/subject
app.all( "/book" , handler);
// will match /book
// won't match /book/author
// won't match /book/subject
app.all( "/book/*" , handler);
// won't match /book
// will match /book/author
// will match /book/subject
在app.use()内部的Next()调用将调用下一个中间件或任何路由处理程序,但在app.all()内部的Next()调用将调用下一个路由处理程序(app.all(), app.get/post/put…只等)。如果后面有任何中间件,它将被跳过。因此,建议将所有中间件始终放在路由处理程序之上。
除了以上的解释,我所经历的:
app.use('/book', handler);
将匹配所有以“/book”开头的请求。所以它也匹配" /book/1 "或" /book/2 "
app.get('/book')
只匹配精确匹配的GET请求。它不会处理像'/book/1'或'/book/2'这样的url
所以,如果你想要一个全局处理程序来处理你所有的路由,那么app.use('/')是选项。app.get('/')将只处理根URL。