我对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。