ByRef / ByVal问题?

我正在观看nodejs上的一些介绍types的video。 我遇到了一个我想到的问题,但我想了解“为什么”。 这是有问题的原始代码:

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 })); 

每次我去使用请求的身体对象,这将是未定义的。 我的问题是app.use(bodyParser.urlencoded({ extended: false })); 。 那么我是如何修复它的? 我把这一行上方controllers.init(app);

所以我想再次理解这个问题,所以我可以在将来避免这个问题。 这是一种byref / byval问题吗? 我把它传递给控制器​​后,我对应用程序对象的所有其他更改似乎工作。 任何人都可以解释这里发生了什么,以及如何防止这种情况发生在未来?

express创build一个pipe道(基于连接中间件)。 从本质上讲,每个中间件通过调用next()callback链接到下一个中​​间件,并通过将它们按照它们在代码中传递给app.use()的顺序堆叠起来,从而使事情变得简单。 控制器处理程序(通常)是例外情况,它们很less调用next() ,而是在对输出stream执行一些操作之后调用res.end()来结束链(在代码中,您可能不会调用end()但其他方法如render()send()在内部调用它)。

Interesting Posts