Rails API无法接收fetch POST请求的请求体数据
解决Rails API中POST请求体无法传递的问题
嘿,我一眼就揪出你代码里的小问题啦,这大概率就是请求体数据传不到后端的元凶!
你看这段fetch请求的配置:
header: { 'content-type': 'application/json' }
这里的header拼写错了!fetch API的请求配置里,HTTP头字段的正确键名是复数形式的headers(带s)。单数的header会被浏览器直接忽略,导致你的请求根本没带上Content-Type: application/json这个关键头信息。
Rails API默认只会解析带有正确Content-Type标识的JSON请求体,如果这个头没设置,后端就不会把请求体内容解析到params里——这就解释了为什么你能触发控制器动作,却拿不到请求数据。
修正后的代码
把header改成headers就搞定了:
export const payForItem = (payData) => { return dispatch => { dispatch(payForItemStart()); const data = { userID: payData.userID, adID: payData.adID, price: payData.price } fetch(`/api/pay`, { method: 'POST', headers: { // 这里改为复数headers 'content-type': 'application/json' }, body: JSON.stringify(data) }) } }
额外验证小技巧
- 改完后打开浏览器开发者工具的Network面板,重新发起请求,确认请求头里包含
Content-Type: application/json; - 后端可以在控制器里打印
request.content_type,如果输出是application/json,说明Rails已经能正确识别并解析请求体了。
另外,既然你说其他同格式请求能正常工作,说明Rails后端的JSON解析配置(比如wrap_parameters相关设置)是没问题的,所以重点就放在前端这个拼写小失误上啦!
内容的提问来源于stack exchange,提问作者O.MeeKoh
相关产品推荐
相关产品推荐

