Node.js Sequelize正在以字符串形式返回整数

Node.js Sequelize正在以字符串形式返回整数,node.js,sequelize.js,Node.js,Sequelize.js,我使用带有sequelize的nodejs v4,我有这样一个模型: var Device = sequelize.define('Device', { id: { type: DataTypes.BIGINT, primaryKey: true, autoIncrement: true }, tenantId: { type: DataTypes.BIGINT, allowNull: false }, token: { type: DataTypes.STRING,

我使用带有sequelize的nodejs v4,我有这样一个模型:

var Device = sequelize.define('Device', {
id: {
  type: DataTypes.BIGINT,
  primaryKey: true,
  autoIncrement: true
},
tenantId: {
  type: DataTypes.BIGINT,
  allowNull: false
},
token: {
  type: DataTypes.STRING,
  allowNull: false
}
}, {
 tableName: 'devices'
});
当我按id选择设备时,id的类型是字符串,例如:

Device.findById(9).then( function(result) {
  console.log(result.toJSON().id + 10);
});
输出将是910,而不是19,所以我看了一下json,a看到了这一点:

{
  id: "9"
  tenantId: "123"
  token: "adsadsdsa"
}
找到的设备中的id是一个字符串,但我将其定义为一个数字

它不是应该是{“id”:9}吗


如何选择具有我之前定义的类型的设备?

默认情况下,请尝试设置结果的格式。您可以为获取原始数据设置
raw:true

我在sequelize回购上找到了解决此问题的方法


sequelize使用的pg模块将bigint作为字符串返回,因为不能保证bigint适合js数字。因此,我将模型改为使用整数(DataTypes.integer)

BIGINT最大值为2^63-1,javascript可以安全地表示多达2^53。为了安全起见,库将这些数字作为字符串返回


如果你想用数字代替字符串,你可以使用这个处理这个问题的库。

IMO,一个更平滑的解决方案是强制将int解析为int,而不是字符串。签出。

如果我错了,请纠正我,但我认为您也必须更改您的DB模式才能正常工作。在我的例子(postgres)中,它不能修复任何东西。