javascript - "sequelize.import()"如何从另一个文件导入模型?

标签 javascript node.js sequelize.js

当我按以下方式创建新模型时:

//user.js file
module.exports = function (sequelize, DateTypes) {

return sequelize.define("user", {
    email: {
        type: DateTypes.STRING,
        allowNull: false,
        unique: true,
        validate: {
            isEmail: true
        }
    },
    password: {
        type: DateTypes.STRING,
        allowNull: false,
        validate: {
            len: [7, 100]
        }
    }
});
};

然后进入我构建新数据库的 db.js 文件:

var Sequelize = require('sequelize');
var env = process.env.NODE_ENV || "development"; // established if you work in production or in development mode
var sequelize;

if (env == "production") {
    sequelize = new Sequelize(process.env.DATABASE_URL, {
        "dialect": "postgres",

    });
} else {
    var sequelize = new Sequelize(undefined, undefined, undefined, {
        'dialect': 'sqlite',
        'storage': __dirname + '/data/dev-todo-api.sqlite' // location where you create a new sqlite database 
    });
}

var db = {};

db.todo = sequelize.import(__dirname + "/models/todo.js");
db.user = sequelize.import(__dirname + "/models/user.js");
db.sequelize = sequelize; //contain a settings of database
db.Sequelize = Sequelize;

module.exports = db;

我不明白 user.js 如何知道 sequelize(我作为参数插入 module.exports)是 sequelize 包的实例,如果它位于另一个文件中?也许是因为 sequelize.import('/user.js') 它导入了整个 sequelize 包?

最佳答案

参见sequelize.import的定义:

Sequelize.prototype.import = function(path) {
  // is it a relative path?
  if(Path.normalize(path) !== Path.resolve(path)){
    // make path relative to the caller
    var callerFilename = Utils.stack()[1].getFileName()
      , callerPath = Path.dirname(callerFilename);

    path = Path.resolve(callerPath, path);
  }

  if (!this.importCache[path]) {
    var defineCall = (arguments.length > 1 ? arguments[1] : require(path));
    if (typeof defineCall === 'object' && defineCall.__esModule) {
      // Babel/ES6 module compatability
      defineCall = defineCall['default'];
    }
    this.importCache[path] = defineCall(this, DataTypes);
  }

  return this.importCache[path];
};

实际上,它在路径上调用了 require,然后将 sequelize 实例作为第一个参数来调用结果。这就是结点,允许模块引用导入它的 sequelize 实例。

关于javascript - "sequelize.import()"如何从另一个文件导入模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40641435/

相关文章:

javascript - 类型错误 : undefined is not a function (evaluating 'this.state.list.map' )

javascript - 从异步 JavaScript 方法返回值?

javascript - 任何客户端 JavaScript 框架都可以与 Node.js+Express.js+socket.io.js 很好地集成吗?

node.js - 无法使用 Node.js 在 heroku 上创建 postgresql 表

node.js - 无法访问 Sequelize 中新添加的列

mysql - 与 MYSQL Sequelize 的一对多关系

javascript - “联系人列表”练习在 chrome 中无法正确运行

javascript - 如何使用正则表达式为特定文本着色

node.js - 如何使用Anchor这个 sails 的验证系统?

node.js - 页面的 Facebook Webhook 根本不触发