繁体   English   中英

将模型作为函数导入,序列化夹具不能从json文件导入数据:未处理的拒绝错误返回?

[英]importing model as function, sequelize fixtures not import data from json file: Unhandled rejection Error return?

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

使用Sequelize-灯具 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');

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

未处理的拒绝错误:models.Mission似乎是一个函数。 也许您正在导入模型工厂功能? 然后,您应该使用sequelize.import来创建模型,请参阅https://github.com/sequelize/express-example/blob/master/models/index.js#L17

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

'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.');
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM