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中使用全局对象。最后一个例子仍然是坏习惯吗?更新:),没关系,我认为我们应该尽可能减少模块之间的依赖关系和关系