Tag: error handling

Nodejs – 如果连接断开,Moongose查找不会抛出错误

我正在使用以下来连接到我的mongodb。 我对密码进行了拼写错误,authentication失败,但直到我进行了模型search,而不是发现错误,它才挂起。 如果没有开放的连接,模型应该抛出错误而不是挂起? mongoose.connect(uristring, function (err, res) { if (err) { console.log ('ERROR connecting to: ' + uristring + '. ' + err); } else { console.log ('Succeeded connected to: ' + uristring); } }); User.findOne({ 'valid.email': Email }, function(err, user) { if (err) { callback({ this is never called }); }

当发生错误时,pm2不重新启动worker

我正在使用pm2来pipe理我的nodejs express应用程序(以集群模式运行)中的进程。 我们有2种error handling程序 第一:'uncaughtException'将被处理 process.on('uncaughtException', function(err){}); 实际上,我并没有声明这样的处理器,让PM2在这种情况下检测到死亡的工作者,所以自动重新启动死亡的工作者。 SECOND:表示error handling程序,我的意思是错误将被转发到expressionerror handling程序,而不是uncaughtException处理程序,像下面的error handling程序 app.use(function(err, req, res, next) {}) 我也没有声明这个error handling程序与uncaughtException相同的目的。 但在这种情况下pm2不重新启动节点。 任何关于这个问题的想法? 非常感谢

页面error handling(PhantomJS)

我试图找出如何处理简单的Pageres脚本中的错误。 目前,它运行时,它运行的只是我想要的。 但是当出现错误时,它会挂起,服务器需要重新启动。 我想要的是: 如果出现错误,请将消息写入日志文件(在/ var / log中) 出口 有任何想法吗? 我尝试了各种各样的东西,我不认为这是很难,但我根本没有经验的Node或PhantomJS。 const Pageres = require('pageres'); const pageres = new Pageres({ delay: 2, filename: '<%= url %>-<%= size %><%= crop %>' }) .src('https://example.com/', ['1920×1080'], {crop: false}) .dest('/home/storepictures/') .run() .then(() => console.log('done'));

奇怪的良性Node.JS错误/警告当我安装

现在我已经忽视了几个星期了,他们似乎堆积如山。 我的节点应用程序和一切工作正常,但只是当我运行npm安装任何节点包它倾向于打印这些。 我已经尝试了一个节点更新和caching清理,但是每当我安装一个新的包,似乎没有删除这些错误。 这里没有什么令人兴奋的和重复的,但完整的输出在这里: http : //paste.ofcode.org/Kvue8nB6pCVJyRmA3rds7h 我怎样才能删除这些错误? 这是一个摘录: > fsevents@0.2.1 install /Users/natumyers/Desktop/mine/AMENSQL-Stack/node_modules/chokidar/node_modules/fsevents > node-gyp rebuild CXX(target) Release/obj.target/fse/fsevents.o In file included from ../fsevents.cc:6: ../../nan/nan.h:339:13: error: no member named 'New' in 'v8::String' return _NAN_ERROR(v8::Exception::Error, errmsg); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../../nan/nan.h:319:50: note: expanded from macro '_NAN_ERROR' # define _NAN_ERROR(fun, errmsg) fun(v8::String::New(errmsg)) ~~~~~~~~~~~~^ ../../nan/nan.h:343:5: error: no member named 'ThrowException' in namespace […]

为什么NodeJS / restify服务器*很less*报EPERM接受?

我正在NodeJS中运行restify服务器。 在非常罕见的情况下,按照HTTPS请求的0.05%的顺序导致net.js报告以下错误: Error: accept EPERM at exports._errnoException (util.js:742:11) at TCP.onconnection (net.js:1280:24) HTTP请求没有什么特别之处。 在报告这个错误之前,服务器可能已经服务了数千个请求,甚至响应了几十个相同的请求。 我一直无法find任何有关为什么服务器可能会为已成功接受连接几个小时的套接字生成EPERM错误的任何信息。 顺便说一下,这个错误发生在我们源代码的任何执行上下文之外。 所以EPERM并不像我们的代码访问文件或执行其他系统调用。 当新的请求到达时,在我们的代码被调用之前,EPERM正在NodeJS TCP代码的深处发生。 起初,当发生错误时,会导致NodeJS终止。 那么我添加了代码来捕获应用程序级别的exception: process.on("uncaughtException", onUncaughtException ); 但是因为我不知道这个错误是怎么发生的,所以还不清楚恢复过程是什么。 不知道它是否会影响,但这里是与启动restify服务相关的大部分代码: var restify = require("restify"); // skipping some other init code // configuration data is read from a JSON file var serverOptions = { name: configuration.server.name, version: configuration.server.version, formatters: { "application/json": […]

在路由结束后使用()

我试图使用Restify的“use()”方法来进行通用的error handling,例如, server = restify.createServer({…}); server.use(restify.acceptParser(server.acceptable)); server.use(restify.queryParser()); server.use(restify.bodyParser()); … app.post('/test/:id', function (req, res, next) {…}) server.use(function(err, req, res, next) { logger.error({req: req}, "error processing request"); }); 但最后的.use()处理程序在路由完成处理之后从未被调用过。 它是在航线之后“登记”的。 我可以看到服务器启动时,这个.use()被处理后,我的路线处理。 我是相当新的restify,所以我的问题是,路由结束后,可以使用.user()方法来应用处理程序。 我知道我们可以听到'after'事件来完成路由后的处理,但是想看看我们能否做.use()处理程序。 更新:这是一个简化版本的代码。 在server.post()之前注册的.use()方法被调用,但不是在server.post()之后注册的。 有什么build议么? var restify = require('restify'); var cookieParser = require('restify-cookies'); var helmet = require('helmet'); var util = require('util'); var logger = require('./util/logger'); module.exports […]

错误对象,本地和自定义,如何区分?

在我的节点应用程序中,我想处理自定义错误以及本机错误。 我似乎总是与error handling斗争,因为错误似乎是一种特殊types的对象,而不是一个正常的JavaScript对象。 我正在尝试使用自定义错误的错误。 我想最终是一个JSONstring,我可以返回到客户端,这两种types的错误(自定义和本机)。 我可以创build一个自定义的错误,如: errors.create({ name: `UnableToDelete`, defaultMessage: `Unable to perform delete.` }); let e1 = new errors.UnableToDelete({ explanation: `Group has members. You can't delete a group that has members.` }); 我可以创build一个本地错误,如: let e2 = new Error(`Unable to perform delete.`); 例如,如果连接到数据库时出现问题,我可能还会从其他地方(例如从节点或另一个第三方模块)获取本机错误。 对于自定义错误,我可以使用JSON.stringify(e1); 哪个工作。 对于本机错误,我可以使用errors.errorToJSON(e2); 哪个工作。 我的问题是能够分辨这些错误之间的差异,所以我可以调用正确的方法。 我不想用正确的方法来包装我的代码中的每一个错误 。 我想让我的Expresserror handling程序做到这一点: function error(err, req, […]

如何在node.js + ajax中向用户发送自定义错误消息

有人可以帮助我通过ajax从服务器发送到客户端的错误信息? 例如,如果我的服务器端返回一个404错误,我希望它也发送一个自定义的消息:“有问题” server.js api.get('/api/some_route', function(req, res, next) { res.sendStatus(404, 'something is wrong'); }); client.js $.ajax({ type: "POST", data: data, success: function(data, status) { console.log(status); }, error: function(jqXHR, textStatus, errorThrown) { console.log(textStatus) //returns error console.log(errorThrown) //returns bad request //I want to someohow print the 'something is wrong' message from the api } }); 提前致谢!

Express中的404后备路线

我完全被Express看似不好的文档弄糊涂了。 我想存档一个非常简单的事情:返回一个自定义404为每个不匹配的路线在express 。 起初,这看起来很直截了当: app.get('/oembed', oembed()); // a valid route app.get('/health', health()); // another one app.get('*', notFound()); // catch everything else and return a 404 但是,当一个有效的URL被打开(像/oembed ) express继续通过路由工作,并最终调用notFound() 以及 。 我仍然可以看到我的/oembed响应,但是在控制台中出现错误,说已经发送正文时, notFound()试图设置标题( 404 )。 我试图实现一个捕获像这样的错误的中间件 function notFound() { return (err, req, res, next) => { console.log(err); res.sendStatus(404); next(err); }; } 并添加app.use(notFound()); ,但这甚至不会被调用。 我发现很难在互联网上find任何东西(例如,这不是过时的或错误的),官方文档似乎没有任何具体的这个非常标准的用例。 我有点卡在这里,我不知道为什么。

Socket.io错误传递约定

背景:在Node中,通常在asynchronous调用中将错误对象传递给callback函数,以及由Joyent 在Node.js中的error handling中解释。 标准错误对象包含名称,消息,堆栈跟踪和可能的附加属性。 将string或普通对象传递或抛出为错误被认为是不好的做法。 使用Socket.io ,数据可以通过发送事件并具有可选的响应callback从客户端传输到服务器,反之亦然。 这打开了多种方式来传递和处理错误。 问题:如果来自客户端的socket.io事件在服务器上导致错误,那么通知客户端这个最好的做法是什么? 一个普通的错误对象的响应? 一个单独的错误事件和侦听器? 错误应该如何构造? 是否有像Node一样的最佳实践? 你在用什么? 例如:设想用于login的socket.io。 客户端通过发出如下所示的用户名和密码login: socket.emit('login', {user: 'Foo', pass: 'Bar'}, function (response) { … }); 在成功login时,响应包含会话令牌。 但是,如果用户名或密码不匹配呢? 想到几种方法: 方法1 – 普通错误对象:响应可能包含一个属性error ,其中包含一个普通的类似错误的对象作为其值,标准名称和消息属性以及可能的附加属性: { error: { name: 'InvalidUsernameOrPasswordError', message: 'Username or password was invalid.', usernameExists: false } } 客户端因此testing响应是否包含错误,如果不是,则继续login过程: socket.emit('login', {user: 'Foo', pass: 'Bar'}, function […]