将params传递给模块的最常用方法是什么?

时间:2013-12-14 11:50:45

标签: node.js express module

所以我遵循最常见或推荐的方法将参数,模块或参数传递到其他模块,例如

var crypto = require('crypto');
var express = require('express');
var mongoose = require('mongoose');
var OAuth = require('oauth').OAuth2;

var app = express();
var config = require('./config.js')(app, crypto, mongoose, OAuth);
var models = require('./models')(mongoose); /*etc.*/

或者扩展app例如

会更常见
var express = require('express');
var app = express();

app.crypto = require('crypto');
app.mongoose = require('mongoose');
app.OAuth = require('oauth').OAuth2;

var config = require('./config.js')(app);
var models = require('./models')(app); /*etc.*/

或者扩展另一个对象并传递它会更安全。

var express = require('express');
var app = express();
var modules = {};

modules.crypto = require('crypto');
modules.mongoose = require('mongoose');
modules.OAuth = require('oauth').OAuth2;

var config = require('./config.js')(app, modules);
var models = require('./models')(app, modules); /*etc.*/

或者,是所有这些边缘情况,我应该采取其他方法吗?

每次我需要在我的应用中使用OAuth时,我都不想构建新的OAuth2实例,所以我当前在配置中创建了一个OAuth2实例,然后将配置传递到我的路由中;我是否仍然可以执行此操作并在每个模块中需要config.js(例如routes.js)?

1 个答案:

答案 0 :(得分:0)

在您的情况下,您不会将crypto,mongoose和Oauth2视为参数。

你的代码应该是这样的:

// app.js

var express = require('express');
var app = express();
var config = require('./config.js')(app);
var models = require('./models')(app);

// config.js或models.js

var crypto = require('crypto');
var mongoose = require('mongoose');
var OAuth = require('oauth').OAuth2;

module.exports = function (app) {
   // your code
}

所有require('mongoose')将共享同一个实例。如果你在app.js上调用mongoose.connect(),那么config.js和models.js也会被连接。


世界上有一些包可能会发送所需的模块作为参数,因为他们遇到了版本冲突的麻烦。但是只有当config.js和models.js是分离的模块(具有自己的package.json的模块)时才会发生这种情况。


关于你的3个例子:

  • 第一个没问题
  • 第二个是坏的,应该是require('。/ config.js)(选项); // options = {...}
  • 第三个没问题