将对象传递给 API POST 路由时,Req.body 在服务器 console.log 中返回 NaN: " "
Posted
技术标签:
【中文标题】将对象传递给 API POST 路由时,Req.body 在服务器 console.log 中返回 NaN: " "【英文标题】:Req.body returns NaN: " " in server console.log when passing object to API POST route将对象传递给 API POST 路由时,Req.body 在服务器 console.log 中返回 NaN: " " 【发布时间】:2019-03-18 03:01:58 【问题描述】:当我发布到我的 API 路由以在我的集合中创建文档时出现错误。数据是发布的用户信息也是一个数据库
这是表单提交:
handleFormSubmit = (event) =>
event.preventDefault();
const userId = localStorage.getItem("userId")
const newForm =
id: userId,
title: this.state.title,
main: this.state.main,
summary: this.state.summary
;
console.log(newForm);
API.addForm(newForm)
.then(response =>
console.log(response)
)
// =============== API =========== //
addForm: function(form)
return axios.post("/api/form", + form);
,
客户端 console.log 打印出正确的对象,其中包含对象中的所有适当值,但是当它到达后端服务器时,POST 正文返回 NaN: "" 抛出 UnhandledPromiseRejectionWarning 错误:验证错误和响应失败
这里是后端 API 路由:
// ======== Index.js for API ======= //
router.use("/api",require("./apiRoutes.js")(passport));
// ============== apiRoutes.js ============= //
router.route("/form")
.post(formController.addRecipe);
// ============= Controller ============ //
addForm: function(req, res)
console.log("addForm Function")
console.log("======================")
console.log(req.body)
db.Form.create(req.body)
.then(form =>
console.log(form)
return db.User.findOneAndUpdate( _id: req.body.id , form: form._id , new:true );
)
.then(userInfo =>
res.json(userInfo);
)
【问题讨论】:
+form
应该做什么?
它是我将 newForm 对象发送到 addForm 路由时的表单参数
为什么是+
?有什么具体原因吗?
不是特指这是我从旧类存储库中提取的一个示例,我可以尝试将其删除,看看是否有效
【参考方案1】:
+ 运算符将form
对象强制为一个数字。由于对象无法以有意义的方式转换为数字,因此它将返回NaN
(不是数字)。以下应该解决它:
addForm: function(form)
return axios.post("/api/form", form);
以下是NaN
来源的示例:
let obj = prop1: 1;
let nonSensicalNumber = +obj;
console.log(nonSensicalNumber);
【讨论】:
是的,谢谢你,这完全有道理,刚开始学习开发 6 个月前,试图打破那些小错误的习惯 很高兴听到!明白,如果你在任何表达式前面加上一个加号,JS 会将它转换为数字。不要忘记 javascript 具有不同的数据类型(字符串、整数、布尔值),只是因为您不必声明它们,它们仍然存在,如果您不知道它们的行为方式可能会导致错误【参考方案2】:在你的 addForm 函数中 axios.post 第二个参数是一个对象,你不需要 + 那里所以删除 +
addForm: function(form)
return axios.post("/api/form", form);
【讨论】:
以上是关于将对象传递给 API POST 路由时,Req.body 在服务器 console.log 中返回 NaN: " "的主要内容,如果未能解决你的问题,请参考以下文章
将对象传递给序列化程序会产生'序列化程序:无法获取repr for
如何将对象传递给 HttpClient.PostAsync 并序列化为 JSON 主体?