node.js - Sequelize i18n : errno: 150 "Foreign key constraint is incorrectly formed")

标签 node.js internationalization sequelize.js multilingual

我正在使用“sequelize-i18n”来支持多语言。我正在将 sequelize 与 nodeJS 一起使用,并使用一个包 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 并且它运行良好。

关于node.js - Sequelize i18n : errno: 150 "Foreign key constraint is incorrectly formed"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51817268/

相关文章:

javascript - Node.js - 在回调之间管理 javascript 范围的更好方法?

node.js - Angular 6没有从expressjs Node 服务器获得响应

java - Vaadin 8 国际化 i18n

GWT 验证框架,如何指定国际化包的位置

node.js - Sequelize 通过关联创建

javascript - 一个接一个地调用脚本

node.js - 如何在node.js中提取POST参数?

ios - 如何检查 iOS 应用程序中真正使用了哪些本地化字符串?

sqlite - 更新记录及其与 sequelize 的关联

node.js - SequelizeForeignKeyConstraintError : insert or update on table "states" violates foreign key constraint "states_country_id_fkey"