如何修改MirageJS数据库中默认生成的id字段为自定义名称
修改Mirage默认id字段名方案
分两种常用场景按需选择:
场景1:修改模型层面主键名(Mirage内部存储+返回前端全链路生效)
该方案会把Mirage数据库中存储的主键字段直接替换为你自定义的名称,无需额外序列化处理。
单个模型单独配置
直接在对应模型定义中声明primaryKey属性即可,以User模型修改为userId为例:
// mirage/models/user.js import { Model } from 'miragejs'; export default Model.extend({ primaryKey: 'userId' });
配置完成后,你调用server.create('user')生成的记录会直接携带userId字段而非默认的id字段。
全局统一配置所有模型主键名
如果需要所有模型都使用同一种自定义主键规则,可以先定义基础模型类,其他模型继承即可:
// mirage/models/base.js import { Model } from 'miragejs'; // 全局默认主键名 export default Model.extend({ primaryKey: 'customId' }); // 业务模型继承基类,可单独覆写主键 // mirage/models/user.js import BaseModel from './base'; export default BaseModel.extend({ primaryKey: 'userId' // 单独给User模型自定义主键,优先级高于全局配置 });
场景2:仅返回前端时重命名字段(Mirage内部仍用id存储)
如果你不需要修改Mirage内部存储的主键规则,只需要在接口返回时把id替换为前端需要的名称,修改序列化器配置即可。
单个模型单独配置
以User模型返回userId为例:
// mirage/serializers/user.js import { RestSerializer } from 'miragejs'; export default RestSerializer.extend({ keyForId(modelClass) { if (modelClass.modelName === 'user') { return 'userId'; } return this._super(...arguments); } });
全局统一配置自动生成对应主键名
如果需要所有模型都返回{模型名}Id格式的主键(比如Post模型返回postId,Comment模型返回commentId),全局序列化器配置如下:
// mirage/serializers/application.js import { RestSerializer } from 'miragejs'; import { camelCase } from 'lodash'; // 无lodash可自行实现小驼峰转换逻辑 export default RestSerializer.extend({ keyForId(modelClass) { return `${camelCase(modelClass.modelName)}Id`; } });
注意事项
- 上述序列化器配置对
RestSerializer和JSONAPISerializer均生效 - 修改主键名后,调用
server.find('user', 1)、server.delete('user', 1)等方法时无需调整传参规则,直接传主键值即可,Mirage会自动匹配你配置的主键字段
内容的提问来源于stack exchange,提问作者nolanxiii
相关产品推荐
相关产品推荐

