向Node.js Express+Mongoose后端发起POST请求失败问题排查
解决前端Fetch请求创建用户时Mongoose验证失败的问题
问题核心:前端发起POST请求时未设置Content-Type: application/json请求头,导致后端无法正确解析JSON格式的请求体,触发Mongoose必填字段验证错误。Postman能成功是因为它会自动添加该请求头。
修复方案
在fetch请求的配置中添加headers属性,指定请求内容类型为JSON:
let handleSubmit = async (e) => { e.preventDefault(); try { let res = await fetch("http://localhost:3000/v1/auth/register", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ email: "test@aol.com", password: "test1234", name: "test", //libraryCardId: "1234asdf", // mobileNumber: mobileNumber, }), }); let resJson = await res.json(); if (res.status === 200) { setName(""); setEmail(""); setMessage("User created successfully"); } else { setMessage("Some error occured"); } } catch (err) { console.log(err); } };
原理说明
当后端使用express.json()中间件解析请求体时,只有请求头包含Content-Type: application/json时,中间件才会将请求体解析为JSON对象。前端fetch默认的Content-Type是text/plain;charset=UTF-8,所以后端无法识别请求体格式,导致解析后的参数为空,Mongoose自然会提示缺少必填字段。
内容的提问来源于stack exchange,提问作者Matt Bernardini
相关产品推荐
相关产品推荐

