我正在nodejs上看一些介绍类型的视频。我遇到了一个问题,我弄清楚了,但我想知道“为什么”。下面是有这个问题的原始代码:
var http = require("http");
var express = require("express");
var bodyParser = require('body-parser');
var app = express();
var controllers = require("./controllers");
controllers.init(app);
app.use(express.static(__dirname + "/public"));
app.set("view engine", "vash");
app.use(bodyParser.urlencoded({ extended: false }));每次我去使用请求的body对象时,它都是未定义的。我的问题是app.use(bodyParser.urlencoded({ extended: false }));。那么我是怎么解决它的呢?我把这一行移到了controllers.init(app);上面。
所以我再次想要了解这里的问题,这样我就可以在将来防止它发生。是某种类型的byref/byval问题吗?在将app对象传递到控制器之后,我对它所做的所有其他更改似乎都起作用了。谁能解释一下这里发生了什么,以及如何防止这种情况在未来发生?
发布于 2014-12-17 04:27:12
express创建一个管道(基于连接中间件)。本质上,每个中间件通过调用next()回调来链接到下一个中间件,并且只需按它们在代码中传递给app.use()的顺序堆叠它们,从而使事情变得简单。控制器处理程序(通常)是这种情况的例外,因为它们很少调用next(),而是在对输出流执行某些操作后通过调用res.end()来结束链(在您的代码中,您可能不会调用end(),但其他方法,如render()和send()会在内部调用它)。
https://stackoverflow.com/questions/27513248
复制相似问题