You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 07:06:07