Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在node.js中引发错误_Javascript_Node.js_Error Handling - Fatal编程技术网

Javascript 在node.js中引发错误

Javascript 在node.js中引发错误,javascript,node.js,error-handling,Javascript,Node.js,Error Handling,我有一个很小的模块作为我的数据模型。它位于路由和数据库之间,用于特定数据(在我的例子中是用户数据) 我在路由代码中需要这个模块,调用它拥有的subscribe方法,通过在我的数据库中存储所需的数据,向用户订阅特定的邮件列表。耶 我的“订阅”方法接受电子邮件和电子邮件列表ID作为两个参数。合理的做法是,我将编写草率而快速的代码,并为不存在的列表输入一个id。拼写错误,你说吧 我如何抛出一个错误并指向id不正确的行号 来自model/user.js内部的代码: if (emailLists.inde

我有一个很小的模块作为我的数据模型。它位于路由和数据库之间,用于特定数据(在我的例子中是用户数据)

我在路由代码中需要这个模块,调用它拥有的
subscribe
方法,通过在我的数据库中存储所需的数据,向用户订阅特定的邮件列表。耶

我的“订阅”方法接受电子邮件和电子邮件列表ID作为两个参数。合理的做法是,我将编写草率而快速的代码,并为不存在的列表输入一个id。拼写错误,你说吧

我如何抛出一个错误并指向id不正确的行号

来自model/user.js内部的代码:

if (emailLists.indexOf(listId) === -1) {
  throw new Error('listId does not exist');
}
来自route.js内部的代码:

user.subscribe('fake@email.com', 'knewsletterr', function (error, success) {
  if (error) { return sendResponse(500, 'Ahhhhhhh!'); }
  if (!error) { return sendResponse(200, 'subscribed'); }
});
现在,我得到:

/home/.../project/models/user.js:85
if (emailLists.indexOf(listId) === -1) { throw new Error('listId does not exist'); }
                                                   ^
Error: listId does not exist
我会帮助你的

var el=document.getElementById('el');
变量日志=函数(val){
el.innerHTML+=''+val+'';
};
试一试{
抛出错误(“代码错误”);
}捕获(e){
日志(e.message);
日志(例如文件名);
日志(如行号);
日志(如堆栈);
};

如果您使用的是节点样式的回调,则不是
抛出
。而是将错误作为第一个参数传递给回调函数-

//用回调除法
功能分区(x,y,完成){
如果(y==0)
返回完成(错误('不能被零除'))
其他的
返回完成(空,x/y)
}
div(6,3,函数(错误,结果){
//*始终*检查错误
如果(错误)
console.log('error',err.message,err.stack)
其他的
console.log('result',result)

})
listId变量未在源代码中定义哈哈,我知道。我是那个犯错误的人。我只想知道如何抛出适当的行号和文件名以及错误。var e=newerror(“asdf”);log(e.stack)谢谢,我读了MDN页面。我想我遇到的问题是node.js堆栈跟踪。我承认,我在这一点上有点困惑。所以:谢谢,这很有帮助!这是我采取的第一种方法,但我会根据订阅某人时发生的情况做三件不同的事情(“已订阅”、“成功”、“其他错误”),所以从概念上区分事情很难。也许我应该像对待应用程序不会运行错误一样对待错误,并按照规则处理其他所有操作的结果。一般来说,
throw
是一种处理错误的同步方法。在使用回调时,假设您处理的是异步代码,
throw
不会特别有用。其思想是,您不必在链中的每个回调中捕获
err
。如果你不想处理中间的错误,你可以把它传递到<代码>完成(Err,x);
如果
err
null
,则不会发生任何事情,但是如果
err
错误
,则上述函数有机会捕捉到它。尽管如此,这并不意味着这是设计异步错误处理的最佳方法。它恰好是node中的约定,因此,如果您正在编写其他人最终会使用的应用程序/库,它可能是最佳选择。如果您只是为自己编写应用程序,那么您可以按照您认为最适合自己的方式设计错误处理,并在与其他lib交互时使用节点约定,而不是
console.log('error:',err.message,err.stack)
也不建议简单地
抛出err
?@JoãoPimentelFerreira惯例是不
抛出
,因为你不能异步地
捕获
。较新的机制,如Promise和
async
/
wait
允许使用
throw
,但不允许使用节点样式的回调。