sequelize-init
时,它会创建config、migrations、models和seeders文件夹。在models文件夹中,有一个index.js
文件(由cli生成),负责从当前文件夹读取所有模型及其关联:'use strict';
const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const basename = path.basename(__filename);
const sequelize = require('../database/connection');
const db = {};
fs
.readdirSync(__dirname)
.filter(file => {
return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
})
.forEach(file => {
const model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes);
db[model.name] = model;
});
Object.keys(db).forEach(modelName => {
if (db[modelName].associate) {
db[modelName].associate(db);
}
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;
当我运行我的应用程序时,会出现一个错误: TypeError: Class constructor model cannot be invoked without 'new' ,该错误出现在第17行,即下面这个语句:var model = require(path.join(__dirname,file))(sequelize,Sequelize.DataTypes); 通过阅读一些与此问题相关的帖子,我发现我需要安装
@babel/preset-env
包以及@babel/cli,@babel/core,@babel/node
。 我还在根目录中创建了一个.babelrc
文件,其中包含以下代码:{
"presets": [
[
"@babel/preset-env",
{
"targets": {
"esmodules": true
}
}
]
]
}
我更新了package.json
中scripts
标签下的start
选项,将其更改为:"nodemon --exec babel-node app.js"
(我不使用webpack)
但是当我运行应用程序时仍然出现错误。我错过了什么或者没有正确设置?
const ThingThatIsAClass = require(path.join(__dirname, file)); const model = new ThingThatIsAClass(sequelize, Sequelize.DataTypes);
不要试图在一行代码中塞入过多内容。这会让代码难以阅读,并容易错过像这个一样微不足道的错误。 - Jared Smithnew (require(…))(…)
,但这样更难理解。 - Bergi