Sequelize - 无法读取undefined的属性'define'

sal*_*lep 6 node.js express sequelize.js

我正在尝试使用sequelize将记录插入MYSQL表.

安装了sequelize和mysql.

npm install --save sequelize

npm install --save mysql
Run Code Online (Sandbox Code Playgroud)

在app.js中定义它

var Sequelize = require('sequelize');
Run Code Online (Sandbox Code Playgroud)

db.js

var Sequelize = require('sequelize');

var sequelize = new Sequelize('randomdb', 'root', 'root', {
    host: 'localhost',
    dialect: 'mysql',
    port : 8889,

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

exports.sequelize = sequelize;
module.exports = Sequelize;
Run Code Online (Sandbox Code Playgroud)

路线/ index.js

var express = require('express');
var router = express.Router();
var sequelize = require('../db').sequelize;

/* GET home page. */
router.get('/', function (req, res, next) {
    res.render('index', {title: 'Express'});
});

router.get('/adduser', function (req, res) {
    var User = sequelize.define('users', {
        first_name: Sequelize.STRING
    });

    sequelize.sync().then(function () {
        return User.create({
            first_name: 'janedoe'
        });
    }).then(function (jane) {
        console.log(jane.get({
            plain: true
        }))
    });
});

module.exports = router;
Run Code Online (Sandbox Code Playgroud)

这是错误.

无法读取undefined的属性'define'

TypeError:无法读取undefined的属性'define'

少了什么东西?

编辑2

db.js

var Sequelize = require('sequelize');

var sequelize = new Sequelize('randomdb', 'root', 'root', {
    host: 'localhost',
    dialect: 'mysql',
    port: 8889,

    pool: {
        max: 5,
        min: 0,
        idle: 10000
    },
    define: {
        timestamps: false
    }
});

var db = {};

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

module.exports = db;
Run Code Online (Sandbox Code Playgroud)

车型/ user.js的

var db = require('../db'),
    sequelize = db.sequelize,
    Sequelize = db.Sequelize;

var User = sequelize.define('random', {
    first_name: Sequelize.STRING
});

module.exports = User;
Run Code Online (Sandbox Code Playgroud)

路线/ index.js

var express = require('express');
var router = express.Router();
var db = require('../db'),
    sequelize = db.sequelize,
    Sequelize = db.Sequelize;

var User = require('../models/user');

router.get('/adduseryes', function (req, res) {
    sequelize.sync().then(function () {
        return User.create({
            first_name: 'janedoe'
        });
    }).then(function (jane) {
        res.send("YES");
    });
});

module.exports = router;
Run Code Online (Sandbox Code Playgroud)

Eva*_*oky 10

在db.js文件中,您将exports使用Sequelize var 覆盖变量.在node.js中,module.exports== exports.试试这个:

var Sequelize = require('sequelize');

var sequelize = new Sequelize(...);

var db = {};

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

module.exports = db;
Run Code Online (Sandbox Code Playgroud)

然后,您可以修改routes/index.js中的导入,如下所示:

var db = require('../db'),
  sequelize = db.sequelize,
  Sequelize = db.Sequelize;
Run Code Online (Sandbox Code Playgroud)