Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Sequelize在结果对象中混合了camel case和snake case键_Javascript_Node.js_Sequelize.js - Fatal编程技术网

Javascript Sequelize在结果对象中混合了camel case和snake case键

Javascript Sequelize在结果对象中混合了camel case和snake case键,javascript,node.js,sequelize.js,Javascript,Node.js,Sequelize.js,我试图从Sequelize创建(或任何Sequelize查询)中得到的普通对象始终是snake-case键。但是,结果对象是混合的。下面是一个查询示例: const object = await models.Account.create({ userId, name, accountNumber }) console.log(object.get({ plain: true })) 结果对象是camel case和snake case的混合键: { "id": 2,

我试图从Sequelize创建(或任何Sequelize查询)中得到的普通对象始终是snake-case键。但是,结果对象是混合的。下面是一个查询示例:

const object = await models.Account.create({
  userId,
  name,
  accountNumber
})

console.log(object.get({ plain: true }))
结果对象是camel case和snake case的混合键:

{
    "id": 2,
    "userId": 1,
    "name": "baller",
    "accountNumber": "1234-123-1234",
    "updated_at": "2019-01-07T02:23:41.305Z",
    "created_at": "2019-01-07T02:23:41.305Z",
    "balance": "0.00",
    "deleted_at": null
}
你知道如何将结果普通对象或嵌套对象完全变成蛇形键吗?在package.json中,将sequelize从^4.42.0升级到^5.0.0-beta,这两种情况都会发生。不知道还可以尝试什么

Accounts表包含所有蛇形结构列名:

return queryInterface.createTable('accounts', {
  id: {
    allowNull: false,
    autoIncrement: true,
    primaryKey: true,
    type: Sequelize.INTEGER
  },
  user_id: {
    allowNull: false,
    type: Sequelize.INTEGER,
    references: {
      model: 'users',
      key: 'id'
    }
  },
  name: {
    allowNull: false,
    type: Sequelize.STRING(50)
  },
  account_number: {
    allowNull: false,
    type: Sequelize.STRING(50)
  },
帐户模型有以下选项:true和camelCase attrs,带snake case中的字段

const Account = sequelize.define('Account', {
  userId: {
    type: DataTypes.INTEGER,
    field: 'user_id',
    allowNull: false,
    validate: {
      notNull(value) {
        if (value == null) {
          throw new Error('Missing user id')
        }
      }
    }
  },
  name: {
    type: DataTypes.STRING,
    field: 'name',
    validate: {
      notEmpty: true
    }
  },
  accountNumber: {
    type: DataTypes.STRING,
    field: 'account_number',
    validate: {
      notEmpty: true
    }
  },
}, {
  tableName: 'accounts',
  paranoid: true,
  underscored: true
})

现在,我要用以下方法来解决这个问题:

import snakeCaseKeys from 'snakecase-keys'

let jsonObject = object.get({ plain: true })
jsonObject = snakeCaseKeys(jsonObject)

这似乎是在sequelize.js v5中实现的,该版本从^4.42.0升级到^5.0.0-beta,但混合仍在发生。还有什么要尝试的吗?您是否应用了
带下划线的
属性?是带下划线的:在上面的模型定义中为true。它应该在别的地方吗?看起来像是被放进了5.0.0测试版。确保您至少有该版本。