node.js变量范围与路径分离

时间:2014-01-20 00:08:15

标签: javascript node.js mongodb variables scope

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

  

./路由

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

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

register.valid模块,最初用

编写
  

./路由/ validation.js

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

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

2 个答案:

答案 0 :(得分:0)

通常在这种结构中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示例项目。

答案 1 :(得分:0)

我假设您当前的代码已经工作(即,您收到发布的数据),但您需要访问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);

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