ByRef / ByVal问题?

时间:2014-12-16 20:23:05

标签: javascript node.js express pass-by-reference pass-by-value

我正在观看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对象所做的所有其他更改似乎都有效。任何人都可以解释这里发生的事情,以及如何防止将来发生这种情况?

1 个答案:

答案 0 :(得分:1)

express创建一个管道(基于连接中间件)。从本质上讲,每个中间件通过调用next()回调链接到下一个中​​间件,它只是按照它们在代码中传递给app.use()的顺序堆叠它们来保持简单。控制器处理程序(通常)是例外,因为它们很少调用next(),而是在对输出流执行某些操作后调用res.end()来结束链(在代码中,您可能不会调用end() 1}},但其他方法,如render()send()在内部调用它。