Tag: error handling

如何在JavaScript中检查特定的exception?

我正在编写一个Node.js应用程序,并且在其代码块之内可能会引发各种exception(通过我称之为第三方代码)。 现在我想对这些例外做出反应,因此我这样做: try { // Call 3rd party code } catch (e) { // Handle e } 基本上,这工作正常,但…我如何区别不同的例外? 不幸的是,他们都有构造函数的Error ,所以这是不可行的。 我可以使用message属性,但当然这不是最好的方式(因为我依赖于事实的消息将永远不会改变,这是 – 恕我直言,更可能比构造函数的变化)。 有任何想法吗? PS:具体地说 – 我需要在尝试执行tls.connect时对SSL错误做出反应。 如何检测到SSL错误?

了解Try / Catch和Domains在Node中的error handling

我一直在研究正确的方法来处理Node中的错误,并且在StackOverflow和NodeJS的站点上find了一些很好的答案,例如如何防止node.js崩溃? try-catch不起作用 ,并且NodeJS自己logging: http : //nodejs.org/api/domain.html 。 不过,我还剩下几个问题,关于何时何地使用try / catch和/或域名。 我意识到这与asynchronous代码和同步代码有关,但即使在NodeJS网站提供的有关域的示例代码中,它们也会在域的error handling程序中使用try / catch。 有人可以解释一些细节,try / catch不会在error handling程序中捕获asynchronous错误吗? 除此之外,NodeJS的文档build议您仍然应该结束exception进程,这就是为什么来自Domain文档的代码build议在发生exception时使用集群来分派新的subprocess/ worker。 主要的原因是: 由于JavaScript在JavaScript中的工作原理,几乎没有任何方法可以安全地“捡起你离开的地方”,而不会泄漏引用或创build其他某种不明确的状态。 有人可以解释这个吗? 抛出在JavaScript中如何工作的本质是什么? 为什么资源会疯狂泄漏? 是否真的有必要重新启动进程或杀死/启动一个工人? 例如,我正在实现JugglingDB ORM,并且曾经忘记启动我的本地mysql服务器。 我遇到了一个ECONNREFUSED错误,导致程序崩溃。 意识到这可能发生在生产环境(数据库崩溃或暂时不可用),我想抓住这个错误,并妥善处理; 重试连接,维护关于数据库的状态variables,并可能通过响应暂时不可用的消息来处理请求。 Try / Catch根本没有发现错误,尽pipe我看到我可以使用一个域名,但是使用推荐的策略,我将处于无休止的杀死和启动工作的循环,直到数据库恢复在线。 JugglingDB ,无论出于何种原因,只有一个“连接”的事件,但没有任何forms的callback函数,通过一个错误的对象; 它试图连接你实例化类的那一刻,并抛出没有捕获并以优美的方式散发的错误。 这使我想看看其他的ORM,但这仍然不能回答我有关如何处理这种情况的问题。 使用一个域来捕获潜在的连接错误,并在没有启动一个新进程的情况下正常处理它会是错误的吗? 这里是我发布到JugglingDB github上的问题: https : //github.com/1602/jugglingdb/issues/405 ,这里是JugglingDB在服务器不存在时产生的错误的堆栈跟踪在启用池选项时发生 ): Error: connect ECONNREFUSED at errnoException (net.js:901:11) at Object.afterConnect [as […]

如何处理内部服务器API和HTTP API之间的错误

这就是我的node.js服务器的组织方式 问题 :API通过模型(mongoose)向我的mongodb数据库发出请求。 所以在API层我可以有: User.findById(id, function(user) { if(user._id !== userid) return deferred.reject(new Error()); // ?? if(!user) return deferred.reject(new Error()); // ?? user[field] = value; user.save(function() { deferred.resolve(user); }); }); 但是,我应该抛出什么错误? 什么方法更合适,更方便用户。 我可以尝试例如: if(user._id !== userid) return deferred.reject(new Error(403)); 但是这意味着没有消息,只是错误代码:/ 另一个解决scheme exports.errors = errors = NOT_FOUND: id: "NOT_FOUND" code: 404 message: "Can't found requested object. Please […]

我应该把自定义错误放在sails.js中?

我想知道什么是最好的做法,如果我应该创build: 一个静态声明我的应用程序使用的所有错误的目录,如api / errors / custom1Error 在文件中直接声明它们 或者把文件直接放在需要那个错误的dir里面,比如api / controller / error / formInvalidError 其他选项!

承诺error handling的基础知识

假设我有这样的代码,假设db.get()是一个promisified API: var promises = []; for( var i = 0; i < 10; i++ ){ promises.push( getFromDatabase("age") ); } Q.all(promises).then(function(results){ // something },function(error){ log.error( error ) }); function getFromDatabase(property){ return db.get(property).then(function(result){ return result; },function(error){ log.error( error ) }) } 谁来处理这个错误? Q.all()的promise链中的函数或者Q.all()的promise链中的函数。 另外,如果在Q.all()有一个顶级error handling程序,是否需要在辅助函数中处理错误?

我怎么知道哪些处理程序在承诺中抛出错误?

假设我有一个承诺如下: p.then(Task1) .then(Task2) .then(Task3) .catch(errorHandler); 当Task2遇到错误时,如何知道错误是从Task2中捕获的 ?

Express.js:从路由处理程序调用下一个(错误)是否调用全局error handling中间件?

比方说,我已经定义了以下中间件和路由处理程序: app.use(function(err,req,res,next) { res.status(500).send('Something broke!'); }); app.get('/test',function(req,res) { //some error happens here, and ther "error" object is defined next(error); }); error handling中间件得到调用吗? 如果不是的话,error handling中间件会被调用 error handling中间件是在路由处理器之下定义的? 我使用throw error; 而不是下next(error); ? 以上都是真的吗? 或者我应该这样做: //route.js module.exports=function(req,res,next) { //error happens here next(error); } //errorHandler.js module.exports=function(err,req,res,next) { res.status(500).send('Something broke!'); } //app.js var route=require('route'); var errorHandler=require('erorHandler'); app.get('/test',[route,errorHandler]); 我现在有点困惑…

Node.js – 在ES6承诺链中抛出exception

作为我正在开发的Node.js / Express API的一部分,我已经构build了一个自定义error handling程序,可以在需要时抛出特定的错误,例如BadRequest或NotFound等。 当我想要抛弃承诺链时,就会出现问题。 例如: db.doSomethingAsync().then(data => { if(data.length === 0){ throw new errors.ResourceNotFound({ resource: "foo" }); } }); 经过对这个话题的大量阅读后,我发现这个错误会被诺言所吞噬,从而导致一个未被处理的Promise拒绝。 我知道我可以拒绝,但我不知道如何才能处理具体的错误(而不是一个拒绝,我不想要)。 另外,要拒绝,我不需要在我的承诺链里创造一个新的承诺吗? 这感觉凌乱。 任何人都可以build议如何处理在承诺链中抛出一个特定的exception?

使用非零代码退出asynchronous脚本的典型方法

假设你有一个看起来像这样的脚本 async function main() { await somethingThatCanFail() } main() 目前,我正在做一个非零代码退出 main() .then(() => console.log('success message and stuff') .catch(function(err) { console.error(err) process.exit(1) }) 因为throw new Error(err)在promise中是徒劳的。 然而,这感觉有点hacky,我想知道是否有一个更标准的方法来做到这一点。

用Javascript写入抛出的错误到一个文件

有没有办法在JavaScript中添加一个默认行为到throw事件。 就像我试图添加到一个文件,每当一个错误被抛出: 例如: if (tables.length === 0) { throw new Error("NO_TABLES_RETRIEVED"); } 我想先写入文件,然后抛出错误。 我知道我可以添加一个函数,只是在抛出之前,我可以调用该函数,但只是为了知道更多的是有什么想添加一个默认行为与抛出?