gpt4 book ai didi

javascript - 将模型作为函数导入, Sequelize 装置不从 json 文件 : Unhandled rejection Error return? 导入数据

转载 作者:行者123 更新时间:2023-11-29 11:19:38 25 4
gpt4 key购买 nike

在我的 Node js 项目中,我使用的是express 和sequelize。我想创建一些装置来填充我的数据表。

使用Sequelize-fixtures npm,这是我的 fixtures.js 文件:

'use strict';

const sequelize_fixtures = require('sequelize-fixtures');

// define all the model
const models = {
Mission: require(__dirname+'/../models/mission.js')
};

var fixtures =[
{
"model": "Mission",
"data": {
"description": "mission test 1",
"state": "pending",
"slug" : "mission-test-1"
}
},
{
"model": "Mission",
"data": {
"description": "mission test 2",
"state": "finished",
"slug" : "mission-test-2"
}
}
];
// export and load fixtures
module.exports = {
loadFixtures: () => {
// can use glob syntax to select multiple files
sequelize_fixtures.loadFixtures(fixtures, models).then(function(){
console.log("Fixtures have been loaded, check your database tables ;) !!!");
});
}
};

在我的项目的根目录中,我在 server.js 中这样调用此模块:

// ...
// Importing sequelize
let database = require(__dirname + '/database/database');
let fixturesLoader = require(__dirname+'/database/fixtures/fixtures.js');

但是当我重新启动 Node 服务器时,我的控制台中现在出现此错误:

Unhandled rejection Error: models.Mission appears to be a function. Perhaps you are importing model factory function? You should then use sequelize.import to create your model, see https://github.com/sequelize/express-example/blob/master/models/index.js#L17

当然,我检查了链接,这就是我使用sequelize以及名为database.js的文件中的配置的方式:

'use strict';

const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const config = require(__dirname+'/database.json');
const db = {};

let sequelize = new Sequelize(config.db.dbname, config.db.user, config.db.password, {
host: config.db.host,
port: config.db.port,
define: {
// And deletedAt to be called destroyTime (remember to enable paranoid for this to work)
deletedAt: 'deleted_at',
paranoid: true,
// don't use camelcase for automatically added attributes but underscore style
underscored: true,
// disable the modification of table names; By default, sequelize will automatically
// transform all passed model names (first parameter of define) into plural.
freezeTableName: true,
charset: 'utf8',
collate: 'utf8_general_ci',
timestamps: true,
language: 'fr'
}
});

fs.readdirSync(__dirname + '/models').filter(function (file) {
return (file.indexOf('.') !== 0);
}).forEach(function (file) {
let model = sequelize.import(path.join(__dirname + '/models', 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;

module.exports = db;

我知道我正在将模型作为函数导入,但是按照文档,我不明白如何在没有这种方式的情况下导入它们。

最佳答案

我刚刚通过在sequelize-fixtures/lib/loader.js 中注释这两行来解决了这个问题:

if (!Model) {
throw new Error('Model not found: ' + fixture.model);
// } else if (typeof Model === 'function') {
// throw new Error('models.' + fixture.model + ' appears to be a function. Perhaps you are importing model factory function? You should then use sequelize.import to create your model, see https://github.com/sequelize/express-example/blob/master/models/index.js#L17');
} else if (!Model.findOne) {
throw new Error('models.' + fixture.model + ' is not a sequelize model.');
}

关于javascript - 将模型作为函数导入, Sequelize 装置不从 json 文件 : Unhandled rejection Error return? 导入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39142315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com