node.js - Sequelize i18n: errno: 150 "外键约束格式不正确")
问题描述
我正在使用“sequelize-i18n”来支持多语言。我正在使用带有 nodeJS 的 sequelize 并找到一个包 i18n 来使用 sequelize。
我遵循了文档,但每次我在下面遇到错误。
Unhandled rejection SequelizeDatabaseError: Can't create table `dev_****`.`product_i18ns` (errno: 150 "Foreign key constraint is incorrectly formed")
at Query.formatError (C:\Users\****\learnings\node\****-acl\node_modules\sequelize\lib\dialects\mysql\query.js:247:16)
at Query.handler [as onResult] (C:\Users\****\learnings\node\****-acl\node_modules\sequelize\lib\dialects\mysql\query.js:68:23)
at Query.Command.execute (C:\Users\****\learnings\node\****-acl\node_modules\mysql2\lib\commands\command.js:30:12)
at Connection.handlePacket (C:\Users\****\learnings\node\****-acl\node_modules\mysql2\lib\connection.js:502:28)
at PacketParser.onPacket (C:\Users\****\learnings\node\****-acl\node_modules\mysql2\lib\connection.js:81:16)
at PacketParser.executeStart (C:\Users\****\learnings\node\****-acl\node_modules\mysql2\lib\packet_parser.js:77:14)
at Socket.<anonymous> (C:\Users\****\learnings\node\****-acl\node_modules\mysql2\lib\connection.js:89:29)
at Socket.emit (events.js:182:13)
at addChunk (_stream_readable.js:283:12)
at readableAddChunk (_stream_readable.js:264:11)
at Socket.Readable.push (_stream_readable.js:219:10)
at TCP.onread (net.js:638:20)
我的产品型号代码如下。
'use strict';
module.exports = (sequelize, DataTypes) => {
var Product = sequelize.define('Product', {
id : {
type : DataTypes.BIGINT,
primaryKey : true,
autoIncrement : true
},
firstName: {
type: DataTypes.STRING,
i18n: true
},
lastName: DataTypes.STRING,
email: DataTypes.STRING
}, {});
return Product;
};
我的服务器文件代码如下初始化 i18n
'use strict';
var fs = require('fs');
var path = require('path');
var Acl = require('acl');
var session = require('express-session');
var Sequelize = require('sequelize');
var SequelizeI18N = require('sequelize-i18n');
var AclSeq = require('acl-sequelize');
var basename = path.basename(__filename);
var env = process.env.NODE_ENV || 'development';
// var config = require(__dirname + '/..\config\config.json')[env];
var config = require('./../config/config.json')[env];
var db = {};
var languages = {
list : ["EN" , "FR" , "ES"] ,
default : "EN"
};
if (config.use_env_variable) {
var sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
var sequelize = new Sequelize(config.database, config.username, config.password, config);
}
var acl = new Acl(new AclSeq(sequelize, { prefix: 'acl_' }));
// Init i18n
var i18n = new SequelizeI18N( sequelize, { languages: languages.list, default_language: languages.default } );
i18n.init();
fs
.readdirSync(__dirname)
.filter(file => {
return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
})
.forEach(file => {
var model = sequelize['import'](path.join(__dirname, file));
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;
请帮帮我,是不是这个包的问题,因为这个包不太受欢迎。
解决方案
我花了几个小时后自己找到了解决方案,可能对其他人有帮助。问题是数据类型不匹配
在我的模型中,我将 id 类型创建为 BIGINT
id : {
type : DataTypes.BIGINT}
但是,当我签入 phpmyadmin 时,它只是 INT(11)。这就是问题所在。所以我不得不将 dataType 更改为 BIGINT 并且它运行良好。
推荐阅读
- javascript - 我可以做1个以上的ID吗?
- python - 如何在子工厂(Django)中包含多对多字段?
- c - 在 C 中使用递归计算二项式系数
- python - 带有 seaborn joinplot 的 2D 核密度图
- assembly - 装配过程中的奇怪行为
- python - 如何解决 pygame 中不支持编解码器错误的“set_pos()”?
- php - php - 在向支付网关提交数据之前在数据库中插入采购订单
- c++ - MODBUS 示例 QT 框架文件 .pro
- java - 索引页上的阔叶商务 404
- aws-lambda - 来自 lambda 的 AWS iot 核心访问