Tag: exception处理

我怎样才能使Chai.js的例外包括堆栈跟踪信息?

我在节点上使用Chai.js。 行console.log(e)其中e是由Chai.js抛出的exception打印像expected a to be within 0..3一样expected a to be within 0..3 。 我怎样才能使Chai.js的例外包括堆栈跟踪信息?

在node.js和express中处理exception

我是新来的JavaScript和节点,并试图创build一个应用程序使用node.js和expression。 我已经对错误进行了适当的callback,但是它们并没有放在任何地方,有时候node.js服务器只是因为一些exception而停止。 build议使用“upstart”或“forever”来保持node.js始终运行,并启动node.js是否停止。 似乎明确提供了所有的exception,从以下链接http://expressjs.com/guide.html#error-handling app.use(function(err, req, res, next){ console.error(err.stack); res.send(500, 'Something broke!'); }); 现在正在为我工​​作。 然而,我读了这样的捕捉错误是不是一个好主意,因为它可以有副作用,并可以使variables处于不一致的状态? 此外,捕获这样的exception对于所有情况都不起作用,并且在某些情况下,服务器仍然可以停止某些exception。 这是真的吗? 我的问题可能是这个。 1)像上面那样的exception处理能否使一些variables处于不一致的状态? 2)是否会有一些exception,将仍然停止服务器? 感谢和问候 图科

NodeJS:http.ClientRequest在特定场景中两次触发错误事件

考虑以下在nodejs中执行的javascript代码: // create ClientRequest // port 55555 is not opened var req = require('http').request('http://localhost:55555', function() { console.log('should be never reached'); }); function cb() { throw new Error(); } req.on('error', function(e) { console.log(e); cb(); }); // exceptions handler process.on('uncaughtException', function() { console.log('exception caught. doing some async clean-up before exit…'); setTimeout(function() { console.log('exiting'); process.exit(1); }, 2000); }); […]

在NodeJS中重新抛出exception,不会丢失堆栈跟踪

如何在nodejs / javascript中重新引发错误或exception,并包含自定义消息。 我有以下代码 var json = JSON.parse(result); 而且我想在发生任何分析错误时将result内容包含在exception消息中。 像这样的东西。 1. try { 2. var json = JSON.parse(result); 3. expect(json.messages.length).to.be(1); 4. } catch(ex) { 5. throw new Error(ex.message + ". " + "JSON response: " + result); 6. } 这里的问题是我失去了我的堆栈跟踪。 有没有办法做到这一点类似于java ? throw new Error("JSON response: " + result, ex);

节点exception处理

节点中处理来自核心节点代码的未处理的期望的最好方法是什么? 我有一个后台进程,运行和爬网的内容,并会运行很长一段时间没有问题,但时常发生意外的exception,我似乎无法妥善处理它。 通常的罪魁祸首似乎是一些networking问题(失去连接),我所做的http调用失败。 我创build的所有函数都遵循FUNCTION_NAME的模式(错误,returned_data),但是在发生错误的情况下,我看不到任何在打印出的调用堆栈中创build的函数,而是显示一些核心节点模块。 我并不担心这些偶发错误及其根本原因,本文的目的只是试图寻找一种处理这些例外的优雅方式。 我试着在我的代码的最上层放一个try / catch,一切都在下面,但是它似乎没有捕获这些exception。 在所有使用任何核心代码的较低级别的函数中使用try / catch是不是很好? 或者有什么方法可以全局捕获所有未处理的exception? 谢谢 克里斯 更新添加堆栈 node.js:201 throw e; // process.nextTick error, or 'error' event on first tick ^ Error: connect Unknown system errno 10060 at errnoException (net.js:642:11) at Object.afterConnect [as oncomplete] (net.js:633:18)

如何使用promise在Javascript中发生exception后重试?

我正在使用蓝鸟承诺库。 我有一系列如下的promisified函数: receiveMessageAsync(params) .then(function(data)) { return [data, handleMessageAsync(request)]; }) .spread(function(data, response) { return [response, deleteMessageAsync(request)]; }) .spread(function(response, data) { return sendResponseAsync(response); }) .then(function(data) { return waitForMessage(data); }) .catch (function(err) { // handle error here }); 偶尔sendMessage将会失败,因为我们假设服务器不能响应。 我希望代码能够一直试图回应,直到成功。 你不能简单地把sendMessage包装到一个catch中,因为它实际上并没有抛出一个exception,我想,它调用了“错误”函数,在这个promisified代码中是底部的“catch”。 所以必须有一些方法来在“catch”部分“重试”发送消息。 问题是,即使我在“catch”的循环中重试,我仍然没有办法跳到promise链并执行剩下的promisified函数。 我如何处理这个? 编辑: 我重试了一个HTTPpost,结果如下所示: function retry(func) { return func() .spread(function(httpResponse) { if (httpResponse.statusCode != 200) { […]

asynchronousJavaScript引发exception没有捕获

基本上,为什么不抓住这个例外? var http = require('http'), options = { host: 'www.crash-boom-bang-please.com', port: 80, method: 'GET' }; try { var req = http.request(options, function(res) { res.setEncoding('utf8'); res.on('data', function (chunk) { console.log('BODY: ' + chunk); }); }); req.on('error', function(e) { throw new Error("Oh noes"); }); req.end(); } catch(_error) { console.log("Caught the error"); } 有人build议这些错误需要用事件发射器或callback(err)来处理(callbackerr,数据签名不是我习惯的) 什么是最好的方式去呢?

带有mysql的NodeJS服务器挂起

我写了一个使用NodeJS,Express,mysql的应用程序,到目前为止一切正常,但是当我的应用程序运行一段时间后,当mysql连接中断,我的应用程序通过这个exception,我的应用程序closures。 Error: read ECONNRESET at errnoException (net.js:901:11) at TCP.onread (net.js:556:19) 从另一个stackquestion我知道,我必须处理这样的未捕获的例外。 process.on('uncaughtException', function(err) { console.log('Caught exception: ' + err); console.log(err.stack); }); 在此之后,我的应用程序不会退出,而是挂起,所以我的问题是如何处理这个exception,以便即使在这个exception和我的应用程序不挂断后,MySQL连接是好的。

node.js套接字exception读取ETIMEDOUT – 如何正确捕获它? 怎么写超时?

我有一个代理服务器,pipe理一堆客户端,并与另一个http服务器通话。 消息被来回发送并导向给客户。 客户端可以做超时,服务器有一个心跳function(每n秒重复一次),发送心跳到clientId映射到套接字连接的所有客户端。 当心跳尝试与不再连接的客户端进行通信,但其套接字仍处于活动状态时,会收到“读取ETIMEDOUT”exception。 我试着暂时将套接字连接的超时设置为2000ms,理论上我的套接字事件处理程序会超时(事件处理程序在tcp服务器部分),但是这并没有发生。 它需要几次心跳死亡。 部分问题肯定是我对如何构造node.js代码缺乏了解,所以如果您有任何build议,我会非常感激他们。 另一个问题是,是否可以单独处理读写超时,或者至less将其分开。 我真正想做的是让我的心跳function成为tcp服务器的一部分,只发送一个心跳(如果在n秒内没有听到客户端的声音),只发送一次心跳。 如果我们超时,那么我们杀死socket,否则我们再等一等。 谢谢! >>$ node –harmony-weakmaps server.js Heartbeat: Sat Feb 18 2012 08:34:40 GMT+0000 (UTC) { sending keep_alive to id:00:00:00:00:00:10 socket:[object Object] } socket:received data: {"id":"00:00:00:00:00:10","m":"keep_alive","success":"true"} Heartbeat: Sat Feb 18 2012 08:35:40 GMT+0000 (UTC) { sending keep_alive to id:00:00:00:00:00:10 socket:[object Object] } socket:received data: {"id":"00:00:00:00:00:10","m":"keep_alive","success":"true"} node.js:201 throw […]

为什么Node.js不能捕捉到我的错误?

var api_friends_helper = require('./helper.js'); try{ api_friends_helper.do_stuff(function(result){ console.log('success'); }; }catch(err){ console.log('caught error'); //this doesn't hit! } 而在do_stuff里面,我有: function do_stuff(){ //If I put the throw here, it will catch it! insert_data('abc',function(){ throw new Error('haha'); }); } 它怎么从来没有logging“发现错误”? 相反,它将堆栈跟踪和错误对象打印到屏幕上: { stack: [Getter/Setter], arguments: undefined, type: undefined, message: 'haha' } Error: haha at /home/abc/kj/src/api/friends/helper.js:18:23 at /home/abc/kj/src/api/friends/db.js:44:13 at Query.<anonymous> (/home/abc/kj/src/node_modules/mysql/lib/client.js:108:11) […]