【发布时间】:2021-06-18 19:54:17
【问题描述】:
我有一个在后端使用 Node 和 Sequelize 的项目。在我不得不将 Node 和 Sequelize 升级到最新版本之前,它运行良好。我意识到我可以降级,但我的其他项目中正在使用 Node 14,并且不想弄清楚如何同时使用多个 Node 版本。
我的模型文件夹中的索引文件读取所有模型 js 文件并自动生成模型。
这是我的代码:
'use strict';
import fs from 'fs';
import path from 'path';
import Sequelize from 'sequelize';
// import DataTypes from 'sequelize/lib/data-types';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
import { dirname } from 'path';
const __dirname = dirname(__filename);
const basename = path.basename(__filename);
import config from '../config/config.js';
import { createRequire } from 'module';
const require = createRequire(import.meta.url);
const db = {};
const sequelize = new Sequelize(config);
fs.readdirSync(__dirname)
.filter((file) => {
return (
file.indexOf('.') !== 0 &&
file !== basename &&
file.slice(-3) === '.js'
);
})
.forEach((file) => {
// const model = sequelize['import'](path.join(__dirname, 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);
}
});
注释掉的行是我之前使用的。但现在 Sequelize 6 删除了导入选项。所以我能够想出一个技巧来让“require”在那个文件中工作。但是现在的问题是,当我尝试运行我的应用程序时,我收到了这个错误:
Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: C:\....\models\Chemicals.js require() of ES modules is not supported. require() of C:\....\models\Chemicals.js from C:\....\models\index.js is an ES module file as it is a .js file whose nearest parent package.json contains "type": "module" which defines all .js files in that package scope as ES modules. Instead rename Chemicals.js to end in .cjs, change the requiring code to use import(), or remove "type": "module" from C:\....\package.json.
如果我不需要,我不想将所有模型重命名为“.cjs”。而且我也不想删除 "type":"module"。
【问题讨论】:
标签: javascript node.js ecmascript-6 sequelize.js