Tag: exception处理

在抛出的对象中传递错误原因/如何处理现代JavaScript中的错误

我正在开发一个包含parsing器的小型Node.js包。 它一旦发现不可恢复的问题就会抛出。 我已经使用了Java多年,我已经习惯了大量的exception类。 但是这是JavaScript。 我想这是一个风格问题。 我的根本问题是如何通过错误原因赶上块。 我考虑为不同的错误原因创build不同的错误“类”,每个错误都关注每个问题的细节,或者将一个错误类作为属性来保存原因。 让我给你一个处理这两种错误的例子: catch(e) { if(e instanceof FirstError) { … } if(e instanceof SecondError) { … } } catch(err) { if(err instanceof AnError) { if(err.detail === 'becauseOfA') { … } if(err.detail === 'becauseOfB') { … } } … } 哪种方法比较好? 两者都可以工作,但我不喜欢第一个。 在我看来,许多课程都像一个巨大的开销。 编辑: 我同意使用callback(也在这里回答): // One class per error type […]

JavaScript:抛出错误时减less堆栈跟踪(指向调用站点)

我有这样的function: function foo() { throw new Error('`foo` has been removed in favor of `bar`') } 当某人调用foo ,我希望堆栈跟踪(错误输出)指向foo的调用位置,而不是foo的throw行。 例如,我得到这个: $ node test.js /home/ubuntu/tmp/test.js:2 throw new Error('`foo` has been removed in favor of `bar`') ^ Error: `foo` has been removed in favor of `bar` at foo (/home/ubuntu/tmp/test.js:2:9) at Object.<anonymous> (/home/ubuntu/tmp/test.js:5:1) … 我怎样才能得到这个呢? $ node test.js /home/ubuntu/tmp/test.js:5 foo() […]

javascript / node.js中的exception是否会被lambdas捕获?

我有一个node.js服务器,我希望能够处理exception而不崩溃,我有代码有点像下面。 我想知道,所有的事件驱动的迷人和callback和lambdas和所有这一切,我的例外仍然会被我的主要切入点抓住? try { http.get(…, function(results) { // Might get an exception here results.on('data', function () { // Might also get an exception here }); results.on('end', function () { // Might also get an exception here }); }); } catch(e) { // Will the exceptions from the lambdas be caught here? console.log('Nicely caught error: (' […]

在节点js中设置超时的麻烦

我有一个域exception处理程序(夜间testing包装)。 我的exception处理程序包装 var domainError = function(func) { return function() { var d = domain.create().on('error', function(err) { console.error(err.stack); }); d.enter(); try { return func.apply(this, arguments); } catch (err) { //do something with the err } d.exit(); } }; 我想设置超时,以便return func.apply(this, arguments); 并不是永远。 任何人都可以build议如何添加超时,并使域结束function,并退出,如果超过超时?

Nodejs +需要instanceof行为

我遇到了NodeJs中instanceof的一个奇怪的行为。 我试图创build一个模块,抛出exception,可以通过消费模块捕获,并根据exceptiontypes处理。 然而,testingtypes“ error instanceof mod.MyException ”的调用总是返回false。 mymodule.js : function MyException() {} MyException.prototype = new Error(); MyException.prototype.constructor = MyException; function Foo() { throw new MyException(); } exports.Foo = Foo; exports.MyException = MyException; myconsumingmodule.js var mod = require('mymodule'); try { mod.Foo(); } catch (error) { if (error instanceof mod.MyException) { // always returns false //do error […]

在SailsJS中处理exception的最佳实践

我刚刚开始尝试SailsJS几天前。 我意识到,只要我有一个未捕获的exception,Node就会被终止。 我有一个控制器的列表,他们每个调用服务中的特定服务JS文件(包含逻辑和数据库调用)。 我可以为所有服务编写一个全局error handling程序,以便由这些服务发生的任何types的错误应该由它处理,并且必须将适当的错误响应传送到前端。 我尝试使用process.on('uncaughtexception')或一些基本的例外,但它需要被添加到每个服务方法。 所有的io.socket.post()和io..socket.get()都经历了从客户端到服务器的所有服务调用。 我将不胜感激任何指针/文章,这些指针/文章将向我展示处理SailsJS中的未捕获exception的常见最佳实践,并使用较短的代码而不是在所有服务中编写冗余代码。

我如何testing摩卡未被捕获的错误?

我想testing下面的函数按预期执行: function throwNextTick(error) { process.nextTick(function () { throw error; }); } 这是我的尝试: describe("throwNextTick", function () { it("works as expected", function (next) { var error = new Error("boo!"); var recordedError = null; process.once("uncaughtException", function (error) { recordedError = error; }); throwNextTick(error); process.nextTick(function () { recordedError.should.be(error); next(); }); }); }); 但摩卡似乎想保留任何错误本身,并得到它们时,我的testing失败: C:\Users\ddenicola\Programming (Synced)\pubit>mocha test/basicTest.js throwNextTick 0) works […]

使用node.js进行Javascriptasynchronousexception处理

我目前正在研究一个node.js应用程序,我有通常的asynchronous代码问题。 我正在Node的HTTP模块上实现一个服务服务器。 这个服务器支持(表示)路线。 例如,我有这样的代码: server.any("/someRoute",function(req,resp){ resp.end("this text is sent to clients via http") }); 服务器需要能够承受失败,当传递给任何一个函数有问题时,我不想让整个服务器崩溃。 当我写代码看起来像这样的问题发生: server.any("/someRoute",function(req,resp){ setTimeout(function(){ throw new Error("This won't get caught"); },100); }); 我不明白我怎么可能在这里发现错误。 我不想通过一个服务器端故障使服务器崩溃,而是想要服务500。 我能想出的唯一解决scheme实际上并不具有performance力。 我只想出了使用process.on("uncaughtException",callback)和类似的代码使用节点0.8 Domains (这是一个部分的补救措施,但领域是目前越野车,这仍然不是很有performance力,因为我最终不得不创造每个句柄的一个域)。 我想完成的是throw一个函数的throw动作绑定到一个作用域,理想的解决scheme就像将所有抛出的错误从一个函数绑定到一个特定的处理函数一样。 这可能吗? 在这种情况下处理错误的最佳做法是什么? 我想强调的是,它应该能够继续服务请求后,不良请求,并重新启动服务器的每个请求或创build域的每个处理程序和捕获他们的未捕获的exception对我来说似乎是一个坏主意。 另外 – 我听到承诺可能会帮助我(有关兑现承诺的事情),可以承诺在这种情况下援助我吗?

无法使用express处理node.js域的exception

我想使用Node.js域来捕获exception。 它到目前为止工作,但有一个地方,我不能让域来赶上例外。 在callback中的exception2被捕获并在domain.on('error')处理程序中处理,但是exception1不被捕获。 奇怪的是,当引发exception1时,它并没有像我期望的那样closures节点。 这是我的示例应用程序: var domain = require('domain'); var request = require('request'); var express = require('express'); var serverDomain = domain.create(); serverDomain.on('error', function(err) { console.log("Server Domain Error: " + err); }); var app; serverDomain.run(function() { app = express(); app.listen(3000); }); app.use(function(req, res, next) { var reqDomain = domain.create(); reqDomain.add(req); reqDomain.add(res); reqDomain.on('error', function(err) { console.log("Req Domain […]

从Node.JS中的未捕获exception中恢复

好的,所以我有一个问题。 如果在处理HTTP请求时发生未捕获的exception,我没有机会调用http.ServerResponse对象上的end()方法。 因此,服务器永远挂起,永远不会满足要求。 这是一个例子: var express = require('express'); var app = express.createServer(); var reqNum = 0; app.get('/favicon.ico', function(req, res) {res.send(404);}); app.get('*', function(req, res, next) { console.log("Request #", ++reqNum, ":", req.url); next(); }); app.get('/error', function(req, res, next) { throw new Error("Problem occurred"); }); app.get('/hang', function(req, res, next) { console.log("In /hang route"); setTimeout(function() { console.log("In /hang callback"); […]