[英]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.