【问题标题】:node.js variable scope with routes separationnode.js 变量范围与路由分离
【发布时间】:2014-02-09 01:16:12
【问题描述】:

我的路由是在外部文件夹中定义的

./路线

这是我在 server.js 文件中定义路由的方式

app.get('/', routes.index);
app.post('/validation', register.valid);

register.valid 模块,原来是用

写的

./routes/validation.js

负责创建新用户帐户并将其注册到数据库 (MongoDB)。

如何在validation.js 中从server.js 访问对象?首先,我认为在定义我的路由之前声明对象可以解决这个问题,但实际上它似乎不是解决方案。

【问题讨论】:

    标签: javascript node.js mongodb variables scope


    【解决方案1】:

    我假设您当前的代码已经可以工作(也就是说,您收到了发布的数据),但您需要从 validation.js 访问另一个对象。

    如果您的代码有效,那么您可能在 server.js 中有这一行:

    var register = require('./routes/validation');
    

    您需要访问验证模块中的变量obj。你可以在验证模块中有一个函数:

    var foo;
    exports.configure = function(obj) {
        foo = obj;
    }
    

    导出意味着变量configure 将可供“需要”验证模块的模块访问。这样您就可以在 server.js 模块中执行此操作:

    register.configure(obj);
    app.post('/validation', register.valid);
    

    具体的配置将取决于您实际尝试完成的任务。例如,有时最好将数据库对象存储在全局变量中。

    【讨论】:

      【解决方案2】:

      通常在这种结构中server.js 将创建app 对象,然后通过函数将其传递给各个路由模块。我通过让每个路由器模块导出一个这样的函数来做到这一点:

      //routes/validation.js
      function setup(app) {
        app.get(....blah
        app.post(....blah
      }
      
      module.exports = setup;
      

      然后我将其绑定在 server.js 中,如下所示:

      //server.js
      var express = require('express');
      var app = express();
      require('./routes/validation')(app);
      

      另请参阅我的express_code_structure 示例项目以了解其他代码组织技巧。

      【讨论】:

        猜你喜欢
        • 2014-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多