JS中的每个对象都有一个toString()方法吗?
如果那是真的,为什么这个错误发生? req.body
对象不是null
或undefined
如图所示。
我使用node-inspector
来debugging我的express.js
应用程序,这张照片是在Chrome Developer Tools
拍摄的。
快速configuration:
app.use(express.bodyParser())
感谢您的意见,现在我发现req.body
是undefined
,但新的问题是如何使toString
再次工作? 我想要req.body.toString()
返回string如下:
如何重新签署一个正确的toString
方法?
我试过delete
未定义的toString
,没有好处。 看到:
JS中的每个对象都有一个toString()方法吗?
不,只有那些从Object.prototype
inheritance它(像所有常规对象那样)或者自己定义它(或者从它们的定制原型inheritance它)的。
你可以通过Object.create(null)
来创build这种不寻常的对象。 你也可以给一个普通的对象一个自己的toString
属性,它会隐藏inheritance的属性,而不是一个函数(例如{toString:0}
),但是我想这会导致一个明显的错误。
在你的情况下, bodyParser()
使用的查询string分析器似乎确实(没有)创build没有原型的对象,以避免在使用这些参数时.constructor.prototype
。 请参阅qs pullrequest#58并表示问题1636: Bodyparser未设置object.prototype? (build议更新)。
如何重新分配一个正确的toString方法?
你可以指定任何function,如
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)
。