如何在Ember中创建无记录名包裹的请求以适配Rails API?
问题描述
我的后端Rails API要求接收的POST请求格式如下:
{ "name": "Mark White", "email" : "mark@xyz.com" }
已通过Postman测试,该格式可成功创建记录。
在Ember前端中,我使用以下代码通过表单输入创建新记录:
app/routes/addUser.js
import Ember from 'ember'; export default Ember.Route.extend({ actions: { addUser(){ let formData = { "name": this.controller.get('name'), "email": this.controller.get('email') }; let newUser = this.store.createRecord('user',formData); newUser.save(); } } });
但这段代码生成的请求格式为:
{ "user": { "name": "Mark White", "email" : "mark@xyz.com" } }
后端无法处理该格式并抛出错误,请问有没有快速调整的方法,让Ember生成与Postman中可用格式一致的JSON请求?
解决方案
你可以通过自定义模型序列化器来修改请求的JSON结构,去掉外层的user包裹,具体步骤如下:
- 在项目中创建
app/serializers/user.js文件 - 写入以下代码(两种方式二选一即可)
方式一:提取内层数据
import DS from 'ember-data'; export default DS.RESTSerializer.extend({ serialize(snapshot, options) { let json = this._super(...arguments); return json.user; } });
方式二:直接序列化不添加根节点
import DS from 'ember-data'; export default DS.RESTSerializer.extend({ serializeIntoHash(hash, type, snapshot, options) { Object.assign(hash, this.serialize(snapshot, options)); } });
修改完成后,Ember发送的POST请求就会生成你需要的扁平JSON结构,和Postman测试的格式完全一致。
内容的提问来源于stack exchange,提问作者elrond2194
相关产品推荐
相关产品推荐

