javascript - 与 express Sequelize

标签 javascript node.js express sequelize.js

我正在关注 tutorial它在express项目中使用sequelize。这是 user.js 模型:

// in models/User.js
module.exports = function(sequelize, DataTypes) {
  return sequelize.define('User', {
    first_name: DataTypes.STRING,
    last_name: DataTypes.STRING,
  }, {
    instanceMethods: {
      countTasks: function() {
        // how to implement this method ?
      }
    }
  });
};

然后他以各种方式使用User,例如:

var user = User.build({ first_name: 'John', last_name: 'Doe' });

我总体上理解代码,但我不完全理解为什么 module.exports 获取带有两个参数(sequelize、DataTypes)的函数。我还没有在代码中的任何地方看到它初始化。那么它是如何工作的呢?

最佳答案

如果您关注this guide您将在 models/index.js 中看到所有模型定义都被循环并传递给 seqelize.import()

你会发现this line of code sequelize.import 中调用模型的模块函数,并将对 sequelizeDataTypes 的引用传递给模型。

在您引用的教程中,作者在 models/index.js 中使用了类似的方法

>编辑(2015年7月14日)

由于该链接不起作用,并且我在他们当前的网站上找不到它,因此我使用 The Wayback Machine 从他们的网站复制了代码。 。我还更新了第二个链接以指向 2.0 文档而不是 master。

models/index.js

"use strict";

var fs        = require("fs");
var path      = require("path");
var Sequelize = require("sequelize");
var env       = process.env.NODE_ENV || "development";
var config    = require(__dirname + '/../config/config.json')[env];
var sequelize = new Sequelize(config.database, config.username, config.password, config);
var db        = {};

fs
  .readdirSync(__dirname)
  .filter(function(file) {
    return (file.indexOf(".") !== 0) && (file !== "index.js");
  })
  .forEach(function(file) {
    var model = sequelize["import"](path.join(__dirname, file));
    db[model.name] = model;
  });

Object.keys(db).forEach(function(modelName) {
  if ("associate" in db[modelName]) {
    db[modelName].associate(db);
  }
});

db.sequelize = sequelize;
db.Sequelize = Sequelize;

关于javascript - 与 express Sequelize ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25838010/

相关文章:

node.js - 为什么我的 GraphQL 订阅在本地服务器上运行,但在部署在实时服务器上时不起作用

javascript - 在 Firefox 中使用 texImage2D 避免 CPU 端转换

javascript - Google App 引擎 Nodejs Puppeteer 中的全局变量

node.js - 下载中带有文件名的NodeJS sendFile

node.js - 如何在 sequelize 中构建 EXISTS 子句

node.js - 使用模型作为条件在 Waterline 中查询

linux - 如何在 Linux 服务器上的端口 80 上启动 node.js?

javascript - 将文本包含为 svg 形状 d3.js

javascript - 更改范围( "this"的值)

javascript - Observable 不发出新值