将对象传递给 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 主体?

显示时将对象传递给模态

在实例化时将对象传递给 Fragment 或 DialogFragment

为啥 MVC 在将对象传递给视图时倾向于将对象转换为数组?