我正在观看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对象所做的所有其他更改似乎都有效。任何人都可以解释这里发生的事情,以及如何防止将来发生这种情况?
答案 0 :(得分:1)
express创建一个管道(基于连接中间件)。从本质上讲,每个中间件通过调用next()
回调链接到下一个中间件,它只是按照它们在代码中传递给app.use()
的顺序堆叠它们来保持简单。控制器处理程序(通常)是例外,因为它们很少调用next()
,而是在对输出流执行某些操作后调用res.end()
来结束链(在代码中,您可能不会调用end()
1}},但其他方法,如render()
和send()
在内部调用它。