Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何在react组件中返回http错误?_Node.js_Reactjs - Fatal编程技术网

Node.js 如何在react组件中返回http错误?

Node.js 如何在react组件中返回http错误?,node.js,reactjs,Node.js,Reactjs,在服务器端,reactjs组件应该如何通知节点应用程序返回http错误 我的第一个想法是抛出一个错误: var notFound = function () { var error = new Error("Not Found"); error.httpError = 404; throw error; }; var App = React.createClass({ render: function () { return react.

在服务器端,reactjs组件应该如何通知节点应用程序返回http错误

我的第一个想法是抛出一个错误:

var notFound = function () {
    var error = new Error("Not Found");
    error.httpError = 404;
    throw error;    
};

var App = React.createClass({
    render: function () {
        return react.DOM.div(null,
            Locations({path: this.props.path},
                Location({path: "/", handler: home}),
                NotFound({handler: notFound})
            )
        );
    }
});

try {
    res.send(React.renderComponentToString(app()));
}
catch (err) {
    if(err.httpError) {
        res.send(err.httpError);
    } else {
        throw err;
    }
}
这是一个有效的解决方案吗?你还有别的想法吗


编辑:我想将这种情况扩展到3xx http重定向,这不是错误。它改变了什么吗

我不认为这与React有关,但实际上与任何框架有关

我认为本文件可以帮助您回答自己的问题:

但是,您应该检查Java世界中的这些(还不够)众所周知的规则:

您正在抛出不属于http抽象的React应用程序异常,因此不应该知道http状态代码。为了在内联HTML中呈现React应用程序的抽象,您应该抛出有意义的异常,然后捕获这些异常并在catch块中选择适当的错误代码。这只是实现的一个细节,但在大型代码基础上,它很重要

顺便说一句,您不应该假设您可以捕获的异常总是您抛出的异常(即将具有
httpError
属性)。任何代码都可以抛出异常,即使您非常确定它不会抛出异常。处理这个问题不是一个坏主意。如果发生这种情况,结果可能是
res.send(未定义)
可能会触发另一个异常,您不会知道该异常的原因,因为它被您的代码不会引发任何意外异常的假设所吞没

要知道的另一个原则是快速失败。如果可以在渲染之前处理错误,则宁愿在渲染之前处理错误。比如:

if ( ValidPaths.contains(path) ) {
   render()
} else {
   res.send(404)
}
如果您可以在不引发异常的情况下处理错误,请注意。服务器上已经存在DOS攻击,从而在服务器上生成大量异常。对于非例外的事情,最好不要使用例外。只要意识到这一点,并选择自己,如果黑客试图DOS你是例外或不:)


无论如何,我认为Javascript异常处理是一个真正的难题:(

这也是我的第一直觉。