Tag: error handling

uncaughtException然后appendFile错误会导致问题? 的NodeJS

我很好奇,如果因为process.exit(1)是在asynchronous操作的callback,appendFile,如果原来的错误发生的地方将继续运行,并处于不稳定的状态。 我试图把process.exit(1)与fs内联,但不会写入。 更好的方法来创build一个错误logging,将login任何错误,将不胜感激。 。 const fs = require('fs'); process.on('uncaughtException', e1 => { fs.appendFile('./logs/error.log', e1.stack, e2 => { //if (e1 || e2) console.log(e1,e2); process.exit(1) }); })

错误事件不处理ECONNREFUSED错误,尝试捕获

我正在使用npm请求模块将传入请求转发到另一台服务器,如下所示: app.get("/somepath", function(req, res) { var url = proxySetting.global.url + req.url; req.pipe(request(url)).pipe(res); }); 这里:proxySetting.global.url == http:// localhost:4000 现在,当我将这样的传入请求转发到目标服务器时,如果目标服务器(localhost:4000)closures或请求在目标服务器上被挂起。 会出现ECONNREFUSED或挂断错误等错误。 尝试使用下面的域模块捕获这些错误 var d = domain.create(); d.on("error", function(err) { console.log("Error occoured while forwarding request"); console.log(err); res.status(500).send("Error occoured while forwarding request"); }); d.run(function() { req.pipe(request(url)).pipe(res); }); 试图在几个组合中发现错误事件 var request = require("request"); module.exports = function(proxySetting) { return function(req, res, […]

asynchronous/等待错误在绑定函数中被吞噬

我正在运行使用async / await的Express应用程序。 我有两条看起来像这样的路线: app.post('/add-item', item.bind(null, 'add')) app.post('/remove-item', item.bind(null, 'remove')) 路由处理程序定义如下: async function item (action, req, res, next) { if (action === 'add') { var result = await addItemFromDB() res.json(result) } else { var result = await removeItemFromDB() res.json(result) } } 因为我想避免在try/catch包装addItemFromDB和removeItemFromDB函数,所以将其包装在助手函数asyncRequest : asyncRequest(async function item(req, res, next) { if (action === 'add') { var […]

用node.jsstreampipe道处理超时

我pipe道到一个HTTPS请求的文件,它可以正常工作99.9%的电话,但偶尔(可能当服务器或networking不可用)挂起无限期… 这显然导致我的应用程序停止工作,需要手动重新启动… 我有其他的HTTPS连接偶尔挂起,现在在请求对象上使用下面的错误代码,现在总是完成,如节点文档中所build议的: request.on('socket', function(socket) { socket.setTimeout(10000); socket.on('timeout', function() { request.abort(); }); }); request.on('error', function(e) { // Handle the error… console.error("FAILED!"); }); …但是,如果目的地是通过pipe道传输到文件stream的话,请求超时似乎会被忽略,也许我应该在文件系统对象上处理一个超时的错误,但是文档不清楚是否有一个事件等待除了“完成”… 这里是示例代码,我希望有人能帮助我: var https = require('https'), fs = require('fs'); var opts = { host: 'www.google.com', path: '/', method: 'GET', port: 443 }; var file = fs.createWriteStream('test.html'); var request = https.request(opts, function(response) { response.pipe(file); […]

没有将数据stream式传输到BigQuery的错误响应

我有一个简单的nodejs脚本,它将数据插入到bigquery表中。 当数据input正确时,它就像一个魅力。 当数据input不正确时,我不会收到错误响应。 我如何处理错误响应? 'use strict' // Imports the Google Cloud client library const BigQuery = require('@google-cloud/bigquery'); //Instantiates a client const bigquery = BigQuery({ projectId: 'projectid', keyFilename: './credentials/cloudkey.json' }); const datasetId = 'datasetId' const tableId = 'test' const rows = [ {"data": "data"}, //correct row {"dtaa": "test"} // incorrect row ] insertRowsAsStream(datasetId, tableId, rows) .then( […]

快速 – multer fileFiltererror handling

我尝试上传一个文件,上传就OK了! 问题是,当我尝试上传一些不被我接受的文件fileFitler处理。 我想在控制台收到一些错误或将用户redirect到后台页面,但我只是在浏览器上收到错误:无法读取未定义的读取属性文件名。 但是,如果我上传一些被接受的扩展,就行了! 这是我的代码: const mongoose = require('mongoose'); const multer = require('multer'); const uuidV4 = require('uuid/v4'); const Video = require('../models/videoModel'); function fileFilter(req, file, cb){ const extension = file.mimetype.split('/')[0]; if(extension !== 'video'){ return cb(null, false), new Error('Something went wrong'); } cb(null, true); }; var storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, './uploads') […]

你应该发送DB错误给用户吗?

在我写的NodeJS / MongoDB服务器中,我有很多的API调用来存储用户和数据库中的内容。 Mongoose已经调用了MongoDB,在查询之后,它将返回一个带有错误(如果有的话)和一个文档(如果有一个返回的)的callback函数。 我想知道如果我应该把错误发送给用户,扔它(停止整个服务器),或只发送500错误。 例: accountDocument.save(function (err, account) { if (err){ res.status(500).json(err); // Option 1 – sends DB error to user res.status(500).end(); // Option 2 – just notifies there was a problem throw err; // Option 3 – stops the server completely } else res.status(200).json(account); }); 我应该select哪一个?

node.jserror handling。 将错误信息存储在err中,而不是自动将其打印到控制台

在下面的代码中,我创build了一个错误 db.collection('deals').findOne({"_id":"8976889"}) .then(function(dealsInfoResult){ throw Error("THIS IS THE ERROR"); return (dealsInfoResult); }) .catch(function(err){ console.log("ERRRR: " + err); res.send(err); }) }); 发生错误后, err没有任何错误信息,其为空。 而是“错误:这是错误”被打印如果有任何错误,我想错误存储在err中,以便我可以用我的方式处理它。

Express.js如何处理错误?

所以,这件小事。 我们知道,Express有内置的默认error handling程序,它需要四个参数(err,req,res,next)来处理像ReferenceError,TypeError等那样的“同步exception”: 更新:这个问题是特定于Express,而不是如何捕捉未处理的exception/等。 我想知道如何在第一个代码块Express可以处理用户定义的exception。 第二个例子与asynchronous。 exception不直接属于这个问题。 const express = require('express')(); express.all('*', (req, res) => { throw new Error('my own error'); res .send('okay?'); }); express.use((err, req, res, next) => { console.error(err.stack); res .status(503) .send('Express is still up and running'); }).listen(3000); 但不是这样的: const express = require('express')(); express.all('*', (req, res) => { process.nextTick(() => { throw new […]

MongoDB NodeJS驱动程序:重复键“E11000”提取索引名称

在使用MongoDB NodeJS驱动程序(甚至mongoose)时,插入新文档时, E11000错误可能会返回,表明发生了重复键冲突。 如果我插入的集合具有多个唯一索引,并且我想要确定哪个集合被击中(例如,通知用户用户他的用户名和/或电子邮件已被采用)? 这是插入带有碰撞索引的文档后引发的错误: { "name": "MongoError", "message": "E11000 duplicate key error index: db.users.$_id_ dup key: { : \"blucell\" }", "driver": true, "index": 0, "code": 11000, "errmsg": "E11000 duplicate key error index: db.users.$_id_ dup key: { : \"blucell\" }" } 导致问题的索引唯一的概念是在消息中,随着时间的推移(在mongo 2.x和3.x之间已经不同了)。 有没有更多的面向未来的/更容易的方法来检查哪个元素/索引引起了碰撞?