使require()变量全局化?

时间:2015-03-08 12:24:08

标签: node.js sails.js

我对节点很新,我想知道是否有类似自动依赖注入的东西。原因是我看到很多软件包(例如在Sails.js中)都有这些可以在任何地方使用的全局变量,我想知道如何做到这一点。

现在我正在为每个模型传递我的数据库连接和ORM,我想知道如何避免它。另外,例如,我希望lodash _是全球性的,所以我不会在我使用它的每个文件中都要求它。

我现在拥有的例子

app.js

var sequelize = require('sequelize');
var db = new sequelize('mysql://root:password@localhost/testDb');

var models = require('./models')(db, sequelize); // I don't want to pass them around

模型/ index.js

'use strict';

module.exports = function(db, sequelize) {
    return {
        users: require('./schemas/_user')(db, sequelize) // again I'm passing here, I don't want to
    };
};

模型/模式/ _user.js

'use strict';

module.exports = function(db, sequelize) { // And here I finally actually am *using* those variables
    return db.define('users', {
        id: {
            field: 'id',
            type: sequelize.INTEGER(11).UNSIGNED,
            primaryKey: true,
            autoIncrement: true
        },
        email: {
            field: 'email',
            type: sequelize.STRING,
            allowNull: false,
            unique: true
        }
    });
};

1 个答案:

答案 0 :(得分:2)

您可以将其设置为global对象(global._ = require('lodash'))的属性,也可以只使用var_ = require('lodash'))定义变量。

然而,就像在浏览器中一样,建议不要污染全局范围。 Moduling存在是有原因的!