尝试使用Web套接字传递错误消息时遇到问题.我可以复制我面临的问题,JSON.stringify以迎合更广泛的受众:
// node v0.10.15
> var error = new Error('simple error message');
undefined
> error
[Error: simple error message]
> Object.getOwnPropertyNames(error);
[ 'stack', 'arguments', 'type', 'message' ]
> JSON.stringify(error);
'{}'
Run Code Online (Sandbox Code Playgroud)
问题是我最终得到一个空对象.
浏览器
我首先尝试离开node.js并在各种浏览器中运行它.Chrome版本28给了我相同的结果,有趣的是,Firefox至少做了一次尝试,但遗漏了消息:
>>> JSON.stringify(error); // Firebug, Firefox 23
{"fileName":"debug eval code","lineNumber":1,"stack":"@debug eval code:1\n"}
Run Code Online (Sandbox Code Playgroud)
替换功能
然后我查看了Error.prototype.它表明原型包含诸如toString和toSource之类的方法.知道函数不能被字符串化,我在调用JSON.stringify时包含了一个replacer函数来删除所有函数,但后来意识到它也有一些奇怪的行为:
var error = new Error('simple error message');
JSON.stringify(error, function(key, value) {
console.log(key === ''); // true (?)
console.log(value === error); // true …Run Code Online (Sandbox Code Playgroud) 前言:
req.helpers.consoleMessage下面看到的函数是一个函数,其中包含一些简单的逻辑,根据应用程序配置中打开的调试的存在以及对象的非null /未定义状态确定何时显示和不显示某个级别的详细信息显示.整个消息使用字符串进行字符串化JSON并返回以显示在控制台上.码:
以下是显示这些症状的一些代码示例.
这是我正在使用的API中delete的:team :comment单元的路由.我故意var response = user.comments;在引用一个user对象时给它留下了一个错误,实际上它应该team由调用函数返回并传递给Promise .then().这应该导致引用错误,因为未定义用户.
var console = clim("(DELETE /api/v1/team/:team/comments/:comment):", logger);
// create a filters request for mongoose
var query = {};
// determine if the :team param is a username or an object id
req.helpers.validateObjectId(req.db, req.params.team) ? query._id = req.params.team : query.name = req.params.team;
if(req.helpers.validateObjectId(req.db, req.params.comment)) {
// looks good; create an update object
var update = …Run Code Online (Sandbox Code Playgroud)