【问题标题】:sequelize is not defined - Sequelize and consignsequelize 未定义 - Sequelize and consign
【发布时间】:2017-04-07 11:44:39
【问题描述】:

我是节点新手。

我正在尝试使用 cosign 在我的简单应用程序中添加 Sequelize。

config/db.js

var Sequelize = require('sequelize');

var sequelize = new Sequelize('test', 'root', '', {

host: 'localhost',
dialect: 'mysql',

 pool: {
max: 5,
min: 0,
idle: 10000
}

});

module.exports = function () {
return sequelize
}

模型/user.js

var Sequelize = require('sequelize');

module.exports = function(application, req, res){

var User = sequelize.define('user', {
username: {
type: Sequelize.STRING,
}
}, {
freezeTableName: true // Model tableName will be the same as the model name
});

User.create({ username: 'fnord'})
.then(function() {
console.log('criado!');
})
}

配置/server.js

...
consign()
.include('app/routes')
.then('config/db.js')
.then('app/models')
.then('app/controllers')
.into(app);

module.exports = app;

我收到错误 sequelize is not defined´ onvar User = sequelize.define('user', {`

我做错了什么?

【问题讨论】:

  • 你是怎么解决这个问题的?

标签: javascript node.js sequelize.js


【解决方案1】:

在你的 Moldes 文件夹中创建一个 index.js 文件,如下所示:

"use strict";

var fs        = require("fs");
var path      = require("path");
var Sequelize = require("sequelize");

var sequelize = new Sequelize(global.config.dbConfig.name, global.config.dbConfig.user, global.config.dbConfig.password, {
  host: global.config.dbConfig.host,
  port: global.config.dbConfig.port,
  pool: false
});

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;

module.exports = db;

在你的 user.js 中做这样的事情:

module.exports = function(sequelize, DataTypes) {
  var User = sequelize.define("User", {
    username: {
      type: DataTypes.STRING
    }, 
    {
      freezeTableName: true // Model tableName will be the same as the model name 
    }
  });

  return User;
}

http://docs.sequelizejs.com/en/1.7.0/articles/express/

【讨论】:

    【解决方案2】:

    您应该要求将实例添加到用户模型中

    config/db.js

    module.exports = sequelize;

    模型/user.js

    var Sequelize = require('sequelize');
    var sequelize = require('../config/db.js'); //sequelize instance
    
    module.exports = function(application, req, res){
    
    var User = sequelize.define('user', { 
    ...
    

    【讨论】:

    • 返回 cannot find ..config/db.js 这一行:.then('config/db.js') 是否已经导入文件?
    【解决方案3】:

    对于使用 Sequelize 的项目,Sequelize-CLI 是一个非常有用的工具。当你下载它时

    npm install -g sequelize-cli
    

    然后你可以运行

    sequelize init
    

    上面的命令会为你写出几个文件夹,包括一个模型文件夹,里面有里卡多在上面创建的索引文件。这也提供了一些非常酷的环境配置。在新的模型文件夹中,您可以使用您的对象创建一个新文件,语法...

    module.exports = function(sequelize, DataTypes) {
      var User = sequelize.define("User", {
        username: {
          type: DataTypes.STRING
        }, 
        {
          freezeTableName: true // Model tableName will be the same as the model name 
        }
      });
    
      return User;
    }
    

    虽然我确实喜欢这个工具。这里的关键是要注意 Sequelize 将去寻找define() 方法的第一个参数。所以我们可以写

    module.exports = function(sequelize, DataType){
    return sequelize.define("User", {
        username: {
          type: DataTypes.STRING
        }, 
        {
          freezeTableName: true // Model tableName will be the same as the model name 
        }
      });
    

    【讨论】:

      猜你喜欢
      • 2015-11-19
      • 1970-01-01
      • 2021-04-07
      • 1970-01-01
      • 2020-01-20
      • 1970-01-01
      • 1970-01-01
      • 2016-11-08
      • 1970-01-01
      相关资源
      最近更新 更多