Node.js 将参数传递到模块中最常用的方法是什么?

Node.js 将参数传递到模块中最常用的方法是什么?,node.js,express,module,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, OA

因此,我追求的是将参数、模块或参数传递到其他模块(例如

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
)?

在您的情况下,您不将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);/选项={…}
  • 第三个可以

谢谢,我已将示例中的
全局
更改为
模块
;我无意在Node.js中使用全局对象。最后一个例子仍然是坏习惯吗?更新:),没关系,我认为我们应该尽可能减少模块之间的依赖关系和关系