Articles of error handling

检查节点中的错误参数

在asynchronous操作中传递一个错误参数是节点中的约定: async.someMagicalDust(function(callback) { // some asynchronous task // […] callback(); }, function(err) { // final callback if(err) throw err; // […] }); 也许我太天真了,但是我从来没有对if(variable)符号的大爱好者 – 可能从Cinheritance,因为过去已经讨论过很多次了 。 另一方面,我有时遇到一个null参数,这个错误检查: if(typeof err !== 'undefined' && err !== null) 有点太冗长了。 另一个解决scheme是 if(err != null) 但我认为非严格的检查可能会非常棘手,即使我认为与空比较是正常的。 检查节点中错误参数的最佳方法是什么?

NodeJS Mongoose Schema“保存”functionerror handling?

我有一个问题向用户输出一个错误,使用res.send(err),这是在Mongoose用户模式的“保存”function的callback中被调用。 我想要注意的是,当我使用console.log(err)时,它显示预期的错误(如用户名太短),但res.send在PostMan发送请求时使用POST值输出“{}”应该会导致错误。 另外我想知道是否应该在我的路由器或我的Mongoose用户模式.pre函数进行inputvalidation? 把validation看起来是正确的,因为它使我的节点路由器文件更清洁。 这里是有问题的代码… 应用程序/路由/ apiRouter.js var User = require('../models/User'); var bodyParser = require('body-parser'); … apiRouter.post('/users/register', function(req, res, next) { var user = new User; user.name = req.body.name; user.username = req.body.username; user.password = req.body.password; user.save(function(err) { if (err) { console.log(err); res.send(err); } else { //User saved! res.json({ message: 'User created' }); } }); }); […]

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); }); […]

我怎样才能debugging节点模块?

我正在考虑参与相当令人兴奋的node.js,但是我正在设法取代我当前的开发环境。 目前,PHPLand中我最好的朋友是Firebug的FirePHP模块,这是一个神的发送,只要debugging你的PHP去。 我有什么方法来debugging节点代码? 它是否输出错误和像PHP一样的警告可以设置?

domain.dispose()在nodejs中做了什么? 有没有钩子?

阅读http://nodejs.org/api/domain.html上的文档使其有点含糊:“ 尽最大的努力去清除与域相关的任何和所有的IO ”。 它提到定时器被closures,这不完全是IO。 知道domain.dispose所做的全面的列表将是非常好的。 有没有人有这个名单? 此外,有没有办法挂钩到该function – 即允许一些自定义清理代码时,domain.dispose()运行?

asynchronous函数应该永远抛出?

我写了一个有许多asynchronous函数的库。 如果其中一个参数是错误的,则SYNCHRONOUS帮助器函数将引发错误: proto.makeParameters= function( filters ){ default: throw( new Error("Field type unknown: " + fieldObject.type ) ); break; } 在我的asynchronous函数中,当我使用它时,我有: proto.someAsyncFunction = function( cb ){ // Run the query try { var parameters = this.makeParameters( filters ); } catch( e ){ return cb( e ); } } 所以: asynchronous函数永远不应该抛出? (就像我做的那样) 现在,我正在捕捉所有的错误。 我更挑剔吗? 也许组成一个错误types,只是检查? 如果是这样的话,我应该怎么做?

防止节点types错误崩溃的应用程序

使用简单的request.js http客户端我注意到,有时一个简单的TypeError可能会崩溃整个节点的应用程序。 举一个例子: request('http://www.google.com', function (error, response, body) { if (!error && response.statusCode == 200) { console.log(body) // Print the google web page. } }) 现在,假设(谷歌的情况下)的情况下,谷歌没有回应,连接只是挂起,然后超时。 此代码简单地崩溃节点应用程序,因为response未定义,因此无法读取response.statusCode 。 这起泡到事件循环,并触发错误的崩溃: TypeError: Cannot read property 'statusCode' of undefined 什么是最简单的方法,我可以防止这种情况发生? 在检查statusCode之前,我可以添加一个检查error值的例子: request('http://www.google.com', function (error, response, body) { if (!error) { if (response.statusCode == 200) { // do stuff […]

Expressjs – 使用中间件处理错误

我正在构build一个API(使用Expressjs v4),通常我已经处理了路由中的错误,而不是使用中间件。 例如: router.use('/', function(req, res, next) { … if (err) return res.status(500).send({type: "serverError", message: "Something has gone wrong on our end."}); } 我现在意识到中间件是“走的路”。 我在这里看到了Expressjs站点上相当有限的文档: http ://expressjs.com/guide/error-handling.html,但仍然不确定一些事情。 我已经在server.js添加了: function errorHandler(err, req, res, next) { } 但我应该如何处理不同types的错误(400,404,500等)? 每当发生错误时,我发现自己正在写3行代码: //A route var err = new Error(); err.status = 404; return next(err); 我可以使用以下方式访问状态: function errorHandler(err, req, res, next) […]

什么是正确的方式来创build快速请求返回的错误消息?

我有一个函数称为a接受callback,如果有错误,会调用一个错误。 a在快速路由请求中被调用。 如果有错误,错误应该是请求的响应。 function a(cb) { cb(new Error('Some error message')) } app.get('/', function (req, res) { a(function (error) { if (error) { res.json(error, 400) } res.send('No error') }) }) 我已经查看了Express的代码,看来res.json会将我的error res.json 。 但是,这个结果是一个空string: > var e = new Error('Some error message') undefined > JSON.stringify(e) '{}' > e.message 'Some error message' 有一些方法可以让我的路线在这里返回错误信息,比如在我的路线中将错误对象转换为toString 。 不过,我想知道在Node API中格式化错误消息的最佳做法是什么,以及这是否会改变这里的内容。 我应该以不同的方式格式化错误消息,还是应该处理路由中的Error对象,例如: […]

一个迁移文件中有多个迁移语句

我试图在一个迁移文件中执行多个迁移语句,以便一次性更改同一个表的多个列。 我想知道我是否以写作的方式去做,还是有更好更合适的方法去做: 迁移代码 module.exports = { up: function(queryInterface, Sequelize, done) { queryInterface.changeColumn('users', 'name', { type: Sequelize.STRING, allowNull: false, require: true, unique: true }).success(function() { queryInterface.changeColumn('users', 'address', { type: Sequelize.STRING, allowNull: false, require: true, unique: true }).success(function() { queryInterface.changeColumn('users', 'city', { type: Sequelize.STRING, allowNull: false, require: true, unique: true }).success(function() { queryInterface.changeColumn('users', 'state', { type: Sequelize.STRING, […]