Articles of error handling

快递:下一个(错误)堆栈跟踪

我发现很难find使用next(err)时发生next(err) 。 有没有办法如何保存堆栈以追溯到原始文件的错误? (即使这是一个validation错误,我想知道它起源的确切位置。)

返回未定义或在无效函数input时抛出错误?

我知道这是重复的,但是在这里的安抚者根本不满足我: JS库最佳实践:返回undefined或抛出错误的functioninput错误? 我想谈谈一些被指出的事情,还有我不清楚的地方。 首先我想介绍一个例子,我个人宁愿抛出一个错误,然后返回undefined。 function sum(a, b) 假设消费者传递了一个string,因为他传递了一个输​​入框的直接值,最终用户input了一个非数字的东西。 如果我作为sum的作者在stringinput时返回了undefined,那么即使dev在某个时刻input了一个string,也不会发生任何事情,他也不会关心,因为那是可以预料的。 但在这种情况下,如果我抛出一个错误,开发人员会意识到,这实际上是一个必须处理的边缘情况,因为毕竟,没有人想要在他们的程序中的错误。 所以基本上,为什么不通过实际抛出错误使开发者意识到边缘案例呢? 这是对上面提到的问题的一个评论,几乎正是我所要求的,但没有人回答: “但是因为我犯了一个错误,而不是默默地死亡,所以这样做对于那些没有花时间去阅读文档的人来说,在debugging的时候能节省几个小时吗? 还有一点就是在上面接受的赞美之中: “捕捉exception比testing返回值要慢很多,所以如果一个错误经常发生,那么exception就会慢很多。” 我能想到的唯一的情况是这个qoute适用于I / O或者networking的东西,其中input总是以正确的格式,但是例如用户不存在那个id。 在这样的情况下,我明白为什么抛出一个错误会减慢进程。 但是,又如何构成一个只包含纯同步函数的math库呢? 检查input而不是检查输出更聪明吗? (确保input不会运行,并检查是否返回undefined) 我真的很困惑,实际上源于types检查,因为我确实来自C#世界,认为图书馆应该像预期的那样按照确切的方式使用,而不是无论如何都是仁慈和工作的。

Node.js:使用domain.dispose()

我在node.js中编写一个服务器,并希望在连接失败时保持运行。 所以,我试图使用新的domain模块,但无法find使用domain.dispose()的正确方法。 首先, node -v :v0.8.3 我认为应该调用domain.dispose()来清除错误,以清除域对象的设置。 但结果不是我所期望的,我也找不到任何有关正确使用的文档或讨论。 这是我想出来的代码来隔离问题: var domain = require('domain'); var EventEmitter = require('events').EventEmitter; var i = 0; function cycle() { process.nextTick(cycle); var emitter = new EventEmitter(); emitter.i = ++i; emitter.on('test', function() { throw new Error('asdasd ' + emitter.i); }); var dm = domain.create(); dm.on('error', function(er) { console.error('Error', er); //dm.dispose(); }); dm.add(emitter); […]

nodejs socket.io不可捕捉的错误

我在nodejs上运行socket.io,在apache网站上运行socket.io客户端。 如果我没有启动nodejs服务器,并且我加载了客户端页面,则错误事件触发时会显示一条空的错误消息,而且我也会将以下内容转储到我的Chrome控制台 GET http://domain.com:1337/socket.io/1/?t=1359731838906 socket.io.js:1659 Socket.handshake socket.io.js:1659 Socket.connect socket.io.js:1699 Socket socket.io.js:1551 io.connect socket.io.js:94 (anonymous function) general.js:7 (anonymous function) 我能做些什么来阻止这个错误被写入控制台?

了解在node.js中的尝试和捕获

我是新来的编码。 尝试了解为什么try … catch不应该在node.js中工作。 我创build了一个例子,但与预期相反,尝试…赶上似乎工作。 我的理解错在哪里? 请帮忙。 function callback(error) { console.log(error); } function A() { var errorForCallback; var y = parseInt("hardnut"); if (!y) { throw new Error("boycott parsley"); errorForCallback = "boycott parsley for callback"; } setTimeout(callback(errorForCallback),1000); } try { A(); } catch (e) { console.log(e.message); } // Output: boycott parsley // Synchronous behaviour, try…catch works […]

nodejs函数中的域error handling程序装饰器

我正在尝试为我的节点js函数编写一个装饰器。 就像是 'Test func a': custom_decorator( func(x)){ .. .. .. }) 假设我想为我的函数添加域error handling程序,我想抽象域error handling到我所有的function.. var d = domain.create().on('error', function(err) { console.error(…); }); d.enter(); "My function" d.exit() 我想将error handling移动到一个装饰器,以便函数作者可以使用它来调用它 function_name : errorDecorator(fn)

使用angular度转换处理API错误的最佳做法

我有一个API <> SPA架构。 但我不知道在哪里翻译,特别是当发送错误。 我宁愿只在我的angular度应用程序翻译文本(i18n等)。 API只能发送英文文本。 但我不知道如何 想象一下这样的错误消息:(nodejs + restify) server.get('/api/', function (req, res, next) { return next(new server.errors.UnauthorizedError('You are not authorized')); }); 这将发送一个401与json的身体。 如果API只会说英文,那么我怎样才能在SPA上翻译呢? 我怎么能把这个翻译方法之一: <span>{{message | translate}}</span> 要么 <span>{{lang.message}}</span> 当然,我使用Angular的$ translateProvider,并且在其中有一个定位文件。 有没有其他的方式发送语言键? 喜欢这个: server.get('/api/', function (req, res, next) { return next(new server.errors.UnauthorizedError('NOT_AUTHORIZED_ERROR')); }); 有了这个我可以有一个locate-en.json文件,如: { errors: { NOT_AUTHORIZED_ERROR: "You are not authorized" } […]

文件太大error handlingNodejs Express Multer

我用ExpressJS使用Muller。 我想限制file upload到0.5 MB。 var limits = { fileSize: 0.5 * 1024 * 1024 }; var upload = multer({ dest: './public/uploads/', limits: limits }).single('upl') app.post('/',upload, function (req, res) { upload(req, res, function (err) { if (err) { console.log("cs " + err); return } res.end('You new avatar is uploaded') // Everything went fine }) }) 当文件在0.5 […]

节点catch()错误不显示文件错误发生

我在节点中使用new –inspect参数来使用Chrome Developer Tools来debugging我的应用程序。 在我的承诺链的最后,我有一个非常基本的问题,但是返回的错误没有清楚地显示它们来自哪里。 我能看到错误发生在哪个文件? leagues(app).getLeagues(passData) .then(teamsApi.getNorsemenTeams) .then(filterBarGamesIndex) .then(gamesApi.getNorseGames) .then(gamesApi.getFilteredTeams) .then(function (passData) { res.render('games', { title: 'Results', passData: passData, type: req.originalUrl.split('/')[2] }) }) .catch(function(err) { console.error(err); //Line 35 }); } 而直接从控制台的错误是: TypeError: Cannot read property 'Intermediate_Division_2' of undefined at /var/www/beta.norsemanfc.co.uk/app/controllers/filterBar/fixturesIndex.js:27:62 at Array.filter (native) at module.exports (/var/www/beta.norsemanfc.co.uk/app/controllers/filterBar/fixturesIndex.js:25:42) at process._tickCallback (internal/process/next_tick.js:103:7)

如何在快速error handling中使用return

这两个调用error handling程序的代码之间的快速应用程序有区别吗? return next(err); next(err); return; 他们是不同还是相同,如果不同,哪一个是正确的/首选的?