关于app.use和app.get的疑惑。
发布于 12 年前 作者 fatelovely 44213 次浏览 最后一次编辑是 8 年前
app.use([path], function)

Use the given middleware function, with optional mount path, defaulting to “/”. 这是app.use的官方说明。说明app.use这个是用来配置路径响应的。app.get以及app.post等等,功能不也是路由响应么?我不明白这两个有什么区别?尤其是执行顺序方面?当我访问localhost:3000的时候,是先调用app.use(function…)呢还是先调用app.get(’/’,…)呢。新手刚刚学习node.js,各位帮帮忙解解疑惑。

7 回复

以前没其他框架使用经验, 这个很头疼, 我也纠结过…

app.use 不是来处理请求的, 而是来加载处理请求的路由模块的参数. 比如这个例子: http://expressjs.com/guide.html

app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(function(err, req, res, next){
  // logic
});

一个请求过来, 被 .use 写好的各个函数依次处理, 更准确说, 是从第一个开始处理, 到一个做一点操作, 也可能截断流程直接返回… 而 app.get 等等 HTTP 请求的操作, 统一在 app.routes 着一个模块里边 http://expressjs.com/api.html#app.routes 所以, 先调用应该是 app.use, 而 app.get 应该是属于被前者调用才对…

我的水平只能解释到这里了…

你这样一说,我好想明白了一点。多谢你了。 你能不能去看一下我发的另一个帖子,关于req.flash的问题。

我觉得这个也是不知道为什么。 我那样写以后,就无法访问 localhost:3000,连接很长时间都连接不上去。删掉

app.use(function(req,res,next){
  res.locals.user=req.session.user;
  res.locals.success=req.session.success;
  res.locals.error=req.session.error;
})

问题就没有了。

你没有next

@fatelovely 你忘记在末尾调用 next 了。

…666 没next 这么low的问题,自己还找不出 请问有什么想法

app.use和app.get,app.post等等在express框架里面处理都是类似的,都是抽象成一个Layer(层),只是app.get这些的层比app.use的层稍微复杂一点.顺序方面的话,先注册的层在访问的时候先调用,调用next()到下一个匹配url的Layer

其实get只是use的一个实现,

回到顶部