Articles of error handling

节点产生进程和存储输出

我的脚本的这一部分正试图产生一个克隆硬盘驱动器的孩子。 它基本上工作,但我遇到的问题是,当我遇到一个错误,并希望存储输出,它只存储输出的第一行,排除我实际需要的东西。 我已经在脚本之外运行了这个命令,它给了我两行输出,如果失败,第二行是错误。 那么,我怎么能存储整个输出。 非常感谢帮助,谢谢! NtfsPartition.prototype.WriteFs = function(filename, progress, success, error) { console.log('Writing NTFS FS'); var s = spawn("ntfsclone", ['–restore-image', '–overwrite', this.dev, filename]); var err_msg = ''; s.on('error', function(err) { err_msg = err; }); s.stderr.on('data', function(data) { err_msg += data.toString(); }); s.stdout.on('data', function(data) { var match = data.toString().match(kNtfsWriteFsProgressRegex); if(!match) { return; } progress(match[1]); }); s.on('exit', […]

Mongk:带有Monk的Mongo数据库:错误捕获和处理,如果数据库closures

我是Mongo的新手。 我需要一个简单的项目的数据库,并结束了使用Mongo和Monk的教程,但我有理解如何处理错误的问题。 背景 :我在客户端有registry单。 当用户点击一个button时,数据通过AJAX发送到控制器(经过validation,但现在不相关),将这些数据插入到数据库中,并返回成功或错误。 当数据库启动似乎一切正常。 问题 :如果我不启动数据库并尝试发送请求,则不会返回错误。 根本没有任何反应 经过一段时间在控制台上,我得到: POST / members / addmember – – ms – – 。 我认为在这种情况下应该返回给用户一些错误,那么我怎么能这样做呢? post请求在下面(几乎和教程一样): // app.js var db = monk('localhost:27017/dbname') […] // I realize it might be not optimal here app.use(function(req,res,next){ req.db = db; next(); }); // members.js router.post('/addmember', function(req, res) { var db = req.db; […]

最好的方法来包装mongoosevalidation错误

我们知道mongoose为我们提供了一个简单的方法来进行validation。 但是,假设你使用express + mongoose来构build一个微服务; 和一些客户端(可能是networking应用程序,手机应用程序等)需要消耗它。 通常,我更喜欢用简单的错误代码和消息来回应JSON。 在大多数情况下,客户可以根据他们向用户显示哪种语言来创build自己的消息。 默认情况下,如果我们从mongoose捕获错误,我们可以得到JSON响应,如: JSON响应 { "errors": { "price": { "message": "Path `price` (-1) is less than minimum allowed value (0).", "name": "ValidatorError", "properties": { "min": 0, "type": "min", "message": "Path `{PATH}` ({VALUE}) is less than minimum allowed value (0).", "path": "price", "value": -1 }, "kind": "min", "path": "price", "value": -1, […]

如何防止pm2在启动过程中出现错误时重新启动应用程序

上下文 我已经将configurationvalidation添加到组成我的Node.js应用程序的一些模块中。 当他们开始时,每个人检查它是否正确configuration,并有权访问它需要的资源(例如可以写入一个目录)。 如果它检测到有什么错误,它会向自己发送一个SIGINT(process.pid),这样应用程序就会正常closures(closureshttp服务器,closures与Redis的连接等等)。 我希望操作员在启动应用程序之前,意识到存在configuration和/或环境问题并对其进行修复。 我使用pm2开始/停止/重新加载应用程序,我喜欢事实pm2会自动重新启动它的情况下,以后崩溃,但我不希望它重新启动我的应用程序在上面的情况下,因为根本原因不会只需重新启动应用程序即可消除,所以pm2将继续重新启动max_restarts (默认为max_restarts中的10)。 题 如何防止pm2在启动过程中中止重新启动应用程序? 我知道–wait-ready有–wait-ready选项,但是由于我们正在讨论多个模块和asynchronous启动逻辑,所以我很难确定何时/何时process.send('ready') 。 可能的scheme 我正在考虑让我的所有模块发出一个内部的“准备好”事件,并把所有连接“准备好”事件的事情连接起来,最终能够将“准备好”发送给pm2,但是我想先问一下,有点过于工程。 谢谢, 罗杰

Elifecycle错误是什么意思?

SyntaxError: /Users/DanaCarlin/Desktop/CS612/expensive.json: Unexpected string in JSON at position 5801 at JSON.parse (<anonymous>) at Object.Module._extensions..json (module.js:654:27) at Module.load (module.js:554:32) at tryModuleLoad (module.js:497:12) at Function.Module._load (module.js:489:3) at Module.require (module.js:579:17) at require (internal/module.js:11:18) at Object.<anonymous> (/Users/DanaCarlin/Desktop/CS612/server.js:2:17) at Module._compile (module.js:635:30) at Object.Module._extensions..js (module.js:646:10) npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! restful-restaurants@0.1.0 start: `node server.js` npm ERR! […]

Node.jserror handling保证与net.createConnection

我想知道,如果Node.js提供任何保证,error handling程序将捕获代码中的所有错误,如下所示: var c = net.createConnection(port, host); c.on('error', function (e) { … }); 我不得不处理在调用createConnection和设置error handling程序的语句之间插入其他语句的代码,这有时会导致createConnection内部的错误渗透到顶层(可能是因为这些错误有时在错误发生之前发生处理程序已经设置)。 但是,除非我错过了一些东西,原则上这可能发生在上面的代码中 – 这不太可能。 有什么方法可以确保createConnection中发生的所有错误都会传递给error handling程序吗?

使用Node.js,把所有的error handling都保存到所有未捕获exception的机制中是否有意义?

看来node.js使用某种线程模型来执行它所谓的“aynch”代码。 这样做的麻烦是我无法捕获在另一个调用栈中外部发生的exception,所以他们冒泡到主线程执行并被一个处理程序捕获。 把所有的error handling都放到所有未被捕获的exception的机制中是否有意义,并且停止在更细粒度的地方尝试/捕获?

为什么NodeJS域的文档代码试图终止这个过程?

在官方的NodeJS文档中,有一些代码示例,当域中出现exception时,进程将尝试正常退出(它closures连接,等待其他请求并等待一段时间,然后退出)。 但为什么不发送500错误,继续工作? 在我的应用程序中,我想在用户input无效时抛出一些预期的错误(如FrontEndUserError),并在中间件的某处捕获这些exception,以便向客户端发送相当错误的消息。 有了领域,它很容易实现,但是这有什么陷阱吗? app.use (err, req, res, next) -> if err instanceof FrontEndUserError res.send {error: true, message: err.message} else log err.trace res.send 500

如何在node.js中使用全局error handling代码进行整个api调用

我有一个有多个function的API调用。 而不是应用每个方法的error handling,是否有可能使用全局error handling代码将错误发送给UI开发人员。 代码如下: app.post('/billing/pricingdetails', function (req, res) { console.log('pricing api called'); var workload = req.body; var resourcelevelPricing = {}; var response = {}; var workloadinfo = { workloadId: workload.workloadId, ownerId: workload.ownerId, uniqueName: workload.uniqueName, name: workload.name } var pricing = {} var allresourceIdentifiers; if (workload.elements && workload.elements.length > 0) { var elementlevelpricingSummary = {}; […]

如何在nodejs和express中处理exception

在nodejs express来处理exception,检查callback中的err为: if(err!==null){ next(new Error ('Erro Message')); } 而这又会调用express的error handling程序中间件。 app.use(function(err, req, res, next){ if(!err) return next(); console.log('<——-Error Occured —–>'); res.send(500, JSON.stringify(err, ['stack', 'message'])); }); 但是为了调用next(err),我不得不通过所有的层遍历所有callback方法的下一个参考。 我觉得这是一个凌乱的办法。 有没有更好的方法来处理exception,并使用事件或域发送适当的响应。