默认情况下,当找不到文件时,Node.js会抛出以下异常。
{ [Error: ENOENT, no such file or directory 'InvalidFile']
errno: 34,
code: 'ENOENT',
path: 'InvalidFile',
syscall: 'open' }
从技术上讲,这应该是一个JavaScript对象。根据javascript对象sematics,应该有一个逗号来分隔成员元素。在这种情况下,[Error: ENOENT, no such file or directory 'InvalidFile']
和errno: 34,
之间没有逗号。我的问题是
如何构建这样的对象?
如何访问
[Error: ENOENT, no such file or directory 'InvalidFile']
元素
在一个程序?
答案 0 :(得分:4)
嗯,这不完全是代码。它基于JavaScript的文字语法,但只是表示从util.inspect()
(或类似的内部函数)生成的对象。
方括号在其Error
之前提及message
的类型。其余的是可添加属性及其值的列表。
自己创建:
var error = new Error("ENOENT, no such file or directory 'InvalidFile'");
error.errno = 34;
error.code = 'ENOENT';
error.path = 'InvalidFile';
error.syscall = 'open'
console.log(error); // uses `util.inspect()`
console.log(util.inspect(error)); // or use it directly
console.log(error.message); // "ENOENT, no such ..."
console.log(Object.prototype.toString.call(error)); // "[object Error]"
并且,对于更大的格式示例,请尝试记录一些内置模块:
console.log(console);
{ log: [Function],
info: [Function],
warn: [Function],
error: [Function],
dir: [Function],
time: [Function],
timeEnd: [Function],
trace: [Function],
assert: [Function],
Console: [Function: Console] }
答案 1 :(得分:0)
我正在回答第2个子问题。公认的答案虽然很好,但似乎忽略了它。
在节点上,[Error:...]元素可以作为.stack在异常对象上进行访问。这是一个字符串,然后您可以使用正则表达式对其进行解析,以获取模块和行号。
例如,您可以像这样解析第一个堆栈帧:
...
} catch (e) {
var msg, file, line, col;
[msg,file,col] = e.stack.match(/\((.*):(\d+)\)/);
if (file) {
[,file,line] = file.match(/(.*):(\d+)/);
}
}