如何修复 \[Object: null prototype\] { title: 'product' }

新手上路,请多包涵

我已经开始学习 node.jsexpress 框架,当我发布这样的表格时:

 router.get('/add-product',(req,res,next)=>{
    res.send('<form action="/product" method="POST" ><input type="text" name="title" /><button type="submit">Submit</button></form>');
});

router.post('/product',(req,res,next)=>{
    console.log(req.body);
    res.redirect('/');
});

当我做 console.log(req.body) 它显示:

 [Object: null prototype] { title: 'product' }

而不仅仅是 { title: 'product' }

我想知道这实际上是 express 的错误还是只是最近添加到 express 的专有性,因为我下载了去年创建的另一个项目并且它使用了相同的方法,当我这样做时 console.log(req.body) ,它显示相同的输出。

原文由 Mohamed Aarab 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 423
2 个回答

这其实是很好的设计。默认情况下,对象继承 Object.prototype 包含一些辅助函数( .toString().valueOf() )。现在,如果您使用 req.body 并且不向 HTTP 请求传递任何参数,那么您会期望 req.body 为空。如果它只是“一个常规对象”,它就不会完全是空的:

 console.info(({ "toString": 5 })['toString']);   // 5
console.info(({})['toString']);                  // [Function: toString]

有一种方法可以创建“空对象”,即没有任何属性/原型的对象,那就是 Object.create(null) 。您正在控制台中看到这些对象之一。

所以不,这不是一个需要修复的错误,这只是对 JS 特性的很好利用。

原文由 Jonas Wilms 发布,翻译遵循 CC BY-SA 4.0 许可协议

尝试这个,

 const obj = JSON.parse(JSON.stringify(req.body)); // req.body = [Object: null prototype] { title: 'product' }

console.log(obj); // { title: 'product' }

快乐编码..!

原文由 Tanzeel Saleem 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题