相关疑难解决方法(0)

如何处理node.js中的代码异常?

我浏览了Express的文档,描述错误处理的部分对我来说完全不透明.

我认为app他们指的是一个实例createServer(),对吧?但我不知道如何在处理请求期间发生异常时阻止node.js炸毁应用程序进程.

我真的不需要任何花哨的东西; 只要有异常,我只想返回500的状态,加上一个空的响应.节点进程不能仅因为某处存在未捕获的异常终止.

有一个如何实现这个的简单例子吗?


var express = require('express');
var http = require('http');

var app = express.createServer();

app.get('/', function(req, res){
    console.log("debug", "calling")
    var options = {
        host: 'www.google.com',
        port: 80,
        path: "/"
    };
    http.get(options, function(response) {
       response.on("data", function(chunk) {
           console.log("data: " + chunk);
           chunk.call(); // no such method; throws here
       });
    }).on('error', function(e) {
       console.log("error connecting" + e.message);
    });
});

app.configure(function(){
    app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

app.listen(3000);
Run Code Online (Sandbox Code Playgroud)

崩溃整个应用程序,产生追溯 …

node.js express

25
推荐指数
3
解决办法
2万
查看次数

从Node.JS中的未捕获异常中恢复

好的,所以我有一个问题.如果在处理HTTP请求时发生未捕获的异常,我就没有机会在http.ServerResponse对象上调用end()方法.因此,服务器永远挂起,永远不会满足请求.

这是一个例子:

var express = require('express');
var app = express.createServer();
var reqNum = 0;
app.get('/favicon.ico', function(req, res) {res.send(404);});
app.get('*', function(req, res, next) {
    console.log("Request #", ++reqNum, ":", req.url);
    next();
});
app.get('/error', function(req, res, next) {
    throw new Error("Problem occurred");
});
app.get('/hang', function(req, res, next) {
    console.log("In /hang route");
    setTimeout(function() {
        console.log("In /hang callback");
        if(reqNum >= 3)
            throw new Error("Problem occurred");
        res.send("It worked!");
    }, 2000);
});
process.on('uncaughtException', function(err) {
    console.log("Uncaught exception!", err);
});
app.listen(8080);
Run Code Online (Sandbox Code Playgroud)

如果您访问/错误,则会发生异常,但会被捕获.用户收到错误消息 - 没问题.但是,如果我访问/挂起,服务器最终将抛出未捕获的异常并永久挂起.任何后续的/ hang请求都将挂起.

这很糟糕.有关如何解决此问题的任何建议?

exception node.js uncaught-exception express

19
推荐指数
1
解决办法
9798
查看次数

使用JS检测所有JS错误

我知道之前可能已经问到这个问题,但我找不到:

我知道你可以使用扩展来检测JS错误,但有没有办法使用JavaScript检测所有错误并在有错误时显示警告?

javascript error-handling

12
推荐指数
1
解决办法
1万
查看次数

量角器运行后的uncaughtException

升级到Protractor 4.0.0并因为重大变化而调整配置后,我们终于启动了测试.

现在,问题是在测试运行后它失败了:

[09:52:22] E/launcher - "process.on('uncaughtException'" error, see launcher
[09:52:22] E/launcher - Process exited with error code 199
Run Code Online (Sandbox Code Playgroud)

如何调试此问题并了解导致它的原因?


试图在"故障排除"模式下运行Protractor:

$ protractor config/local.conf.js --troubleshoot
Run Code Online (Sandbox Code Playgroud)

但得到完全相同的输出,没有关于错误的详细信息.

javascript testing angularjs selenium-webdriver protractor

7
推荐指数
1
解决办法
1万
查看次数

处理快递中的异常

我无法理解如何处理看起来像是快递的一个非常基本的方面.如果我有一些代码在异步回调中抛出异常,我就无法捕获该异常,因为在回调运行时try/catch块不再在范围内.在这些情况下,浏览器将挂起,直到它最终放弃,表明服务器没有响应.这是一个非常糟糕的用户体验.我宁愿能够立即向客户端返回500错误.默认的快速错误处理程序显然不处理这种情况.以下是一些示例代码:

var express = require("express");

var app = express();
app.use(app.router);
//express error handler (never called)
app.use(function(err, req, res, next) {
    console.log(err);
    res.send(500);
});

app.get("/test", function(req, res, next) {
    require("fs").readFile("/some/file", function(err, data) {
        a.b(); //blow up
    });
});

app.listen(8888);
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,行ab()抛出"ReferenceError:a is not defined"异常.永远不会调用定义的错误处理程序.请注意,fs.readFile()返回的错误对象在这种情况下为null,因为文件已正确读取.错误是异步处理程序中的代码.

我已经读过这篇关于使用node的uncaughtExpception的文章,但文档说不使用该方法.即使我确实使用过它,我如何将500响应发送回用户?我不再使用快速响应对象了.

那么你如何处理这种情况?

exception node.js express

6
推荐指数
2
解决办法
5736
查看次数

如何防止nodejs控制台关闭

有没有什么可以替代PHP error_reporting(0)nodejs的?我想防止应用程序在发生错误后关闭,我尝试了try and catch method,但它不起作用。那么,如何防止node.js server出现错误后关闭呢?

node.js

3
推荐指数
1
解决办法
4063
查看次数