繁体   English   中英

force Sequelize retrun result in camelCase

[英]force Sequelize retrun result in camelCase

我在 node.js 快速项目中使用 Sequelize,我希望为 sequelize object 生成的每个属性都以驼峰命名法返回。 因为数据库Developer使用PascalCase 前端Developer使用camelCase

所以我需要想出一种机制来将每个属性名称从 PascalCase 转换为驼峰命名法,有什么想法吗?

您可以通过field属性指定自定义列名。 请参阅初始化 model

attributes.column.field :如果设置,sequelize 会将 map 属性名称更改为数据库中的不同名称

例如

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();
  }
})();

执行上述代码的日志:

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' } ]

检查数据库中的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)

如您所见,您可以将具有驼峰命名法字段的users发送到前端。 User表中的列使用 PascalCase。

暂无
暂无

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

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