如果这是真的,为什么会发生这种错误?如图所示,req.body
对象不是null
或undefined
。
我使用node-inspector
调试我的express.js
应用,这张照片是在Chrome Developer Tools
中拍摄的。
快速配置:
app.use(express.bodyParser())
感谢您的评论,现在我发现req.body
为undefined
,但新问题是如何让toString
再次发挥作用?我希望req.body.toString()
返回字符串,如下所示:
如何重新签署正确的toString
方法?
我尝试了delete
未定义的toString
,没有好处。参见:
答案 0 :(得分:15)
JS中的每个对象都有一个toString()方法吗?
没有。只有那些从Object.prototype
继承它(就像所有普通对象一样)或者自己定义它(或者从它们的自定义原型继承它)的那些做。
您可以Object.create(null)
创建此类异常对象。您还可以为普通对象提供一个自己的toString
属性,该属性可以隐藏继承的属性,而不是一个函数(例如{toString:0}
),但我想这会产生明显的错误。
在您的情况下,似乎bodyParser()
使用的querystring parser确实(确实)创建了没有原型的对象,以避免在使用这些参数时损坏.constructor.prototype
。请参阅qs pullrequest #58和express issue 1636: Bodyparser not setting object.prototype?(建议更新)。
如何重新分配正确的toString方法?
您可以分配任何功能,例如
req.body.toString = function() { return "Hi, I'm a request body"; };
但可能你想要标准的那个:
req.body.toString = Object.prototype.toString;
其他选项是通过非标准__proto__
属性(req.body.__proto__ = Object.prototype
)重新定义原型,或者只是在对象上应用独立函数而不是使其成为方法,如Object.prototype.toString.call(req.body)