简体   繁体   English

force Sequelize retrun result in camelCase

[英]force Sequelize retrun result in camelCase

I'm using Sequelize in a node.js express project, I want to have every property generated for a sequelize object to be returned in camelCase.我在 node.js 快速项目中使用 Sequelize,我希望为 sequelize object 生成的每个属性都以驼峰命名法返回。 Because the database Developer uses PascalCase The frontEnd Developer uses camelCase因为数据库Developer使用PascalCase 前端Developer使用camelCase

So I need to come up with a mechanism to transforms every property name from PascalCase into camelCase, any Idea?所以我需要想出一种机制来将每个属性名称从 PascalCase 转换为驼峰命名法,有什么想法吗?

You can specify a custom column name via the field attribute.您可以通过field属性指定自定义列名。 See Initialize a model .请参阅初始化 model

attributes.column.field : If set, sequelize will map the attribute name to a different name in the database attributes.column.field :如果设置,sequelize 会将 map 属性名称更改为数据库中的不同名称

Eg例如

import { sequelize } from '../../db';
import { DataTypes, Model } from 'sequelize';
import faker from 'faker';

class User extends Model {}
User.init(
  {
    userId: {
      primaryKey: true,
      autoIncrement: true,
      allowNull: false,
      type: DataTypes.INTEGER,
      field: 'UserId',
    },
    userEmail: {
      type: DataTypes.STRING,
      field: 'UserEmail',
    },
    userAvatar: {
      type: DataTypes.STRING,
      field: 'UserAvatar',
    },
  },
  { sequelize },
);

(async function test() {
  try {
    await sequelize.sync({ force: true });
    // seed
    await User.bulkCreate([
      { userEmail: faker.internet.email(), userAvatar: faker.internet.avatar() },
      { userEmail: faker.internet.email(), userAvatar: faker.internet.avatar() },
      { userEmail: faker.internet.email(), userAvatar: faker.internet.avatar() },
    ]);
    const users = await User.findAll();
    const userDataValues = users.map((u) => u.dataValues);
    console.log(userDataValues);
  } catch (error) {
    console.log(error);
  } finally {
    await sequelize.close();
  }
})();

The logs for executing the above code:执行上述代码的日志:

Executing (default): DROP TABLE IF EXISTS "User" CASCADE;
Executing (default): DROP TABLE IF EXISTS "User" CASCADE;
Executing (default): CREATE TABLE IF NOT EXISTS "User" ("UserId"   SERIAL , "UserEmail" VARCHAR(255), "UserAvatar" VARCHAR(255), PRIMARY KEY ("UserId"));
Executing (default): SELECT i.relname AS name, ix.indisprimary AS primary, ix.indisunique AS unique, ix.indkey AS indkey, array_agg(a.attnum) as column_indexes, array_agg(a.attname) AS column_names, pg_get_indexdef(ix.indexrelid) AS definition FROM pg_class t, pg_class i, pg_index ix, pg_attribute a WHERE t.oid = ix.indrelid AND i.oid = ix.indexrelid AND a.attrelid = t.oid AND t.relkind = 'r' and t.relname = 'User' GROUP BY i.relname, ix.indexrelid, ix.indisprimary, ix.indisunique, ix.indkey ORDER BY i.relname;
Executing (default): INSERT INTO "User" ("UserId","UserEmail","UserAvatar") VALUES (DEFAULT,'Korey31@hotmail.com','https://s3.amazonaws.com/uifaces/faces/twitter/markretzloff/128.jpg'),(DEFAULT,'Tevin_Wintheiser81@yahoo.com','https://s3.amazonaws.com/uifaces/faces/twitter/faisalabid/128.jpg'),(DEFAULT,'Cody47@yahoo.com','https://s3.amazonaws.com/uifaces/faces/twitter/sur4dye/128.jpg') RETURNING *;
Executing (default): SELECT "UserId" AS "userId", "UserEmail" AS "userEmail", "UserAvatar" AS "userAvatar" FROM "User" AS "User";
[ { userId: 1,
    userEmail: 'Korey31@hotmail.com',
    userAvatar:
     'https://s3.amazonaws.com/uifaces/faces/twitter/markretzloff/128.jpg' },
  { userId: 2,
    userEmail: 'Tevin_Wintheiser81@yahoo.com',
    userAvatar:
     'https://s3.amazonaws.com/uifaces/faces/twitter/faisalabid/128.jpg' },
  { userId: 3,
    userEmail: 'Cody47@yahoo.com',
    userAvatar:
     'https://s3.amazonaws.com/uifaces/faces/twitter/sur4dye/128.jpg' } ]

Check User table in the database:检查数据库中的User表:

node-sequelize-examples=# select * from "User";
 UserId |          UserEmail           |                             UserAvatar                              
--------+------------------------------+---------------------------------------------------------------------
      1 | Korey31@hotmail.com          | https://s3.amazonaws.com/uifaces/faces/twitter/markretzloff/128.jpg
      2 | Tevin_Wintheiser81@yahoo.com | https://s3.amazonaws.com/uifaces/faces/twitter/faisalabid/128.jpg
      3 | Cody47@yahoo.com             | https://s3.amazonaws.com/uifaces/faces/twitter/sur4dye/128.jpg
(3 rows)

As you can see, you can send the users that have camelCase fields to the frontend.如您所见,您可以将具有驼峰命名法字段的users发送到前端。 The columns in the User table use PascalCase. User表中的列使用 PascalCase。

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

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