10

在此处输入图像描述

在此处输入图像描述

如果这是真的,为什么会发生这个错误?该req.body对象不是nullundefined如图所示。

我使用node-inspector来调试我的express.js应用程序,这张照片是在Chrome Developer Tools.

快递配置:

app.use(express.bodyParser())

感谢您的评论,现在我找到了req.bodyis undefined,但新的问题是如何toString再次制作作品?我想req.body.toString()返回如下字符串:

在此处输入图像描述

如何重新签署正确的toString方法?

我尝试delete了 undefined toString,不好。看:

在此处输入图像描述

4

1 回答 1

16

JS 中的每个对象都有一个 toString() 方法吗?

不,只有那些继承它Object.prototype(就像所有普通对象一样)或自己定义它(或从他们的自定义原型继承)的人才能这样做。

您可以通过创建此类不寻常的对象Object.create(null)。你也可以给一个普通的对象一个自己的toString属性来隐藏继承的对象而不是一个函数(例如{toString:0}),但我想这会引发一个明显的错误。

在您的情况下,似乎确实(确实)使用的查询字符串解析器bodyParser()确实创建了没有原型的对象,以避免.constructor.prototype在使用此类参数时出现错误。请参阅qs pullrequest #58表达问题 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).

于 2013-09-05T15:53:30.103 回答