处理 Node.js 中的异常并将错误输出发送到 HTML
2020-05-24
667
我有一个函数,如果出现错误,控制台会记录错误,我希望将相同的数据发送回 HTML
<div>
。
<div>
必须仅在出现错误时加载并向用户显示错误消息。
app.js
console.log('Pulling Image from DockerHub\n');
const result1 = cp.execSync('docker pull mongo:'+version);
console.log(result1.toString());
假设上述代码生成一个错误,我希望使用 jQuery AJAX 获取 HTML 上的数据。
index.html
<div id="errorReport"></div>
<script type="text/javascript">
$(document).ready(function(){
$.ajax({
url: "http://localhost:8090/api/route1",
type: 'POST',
dataType:'json',
success: function(res) {
console.log(res);
}
});
});
</script>
需要处理上述子进程
(app.js)
中的错误异常,并且仅当存在错误时才在
index.html
上呈现数据。如果 cp 没有返回任何错误,则无需在
index.html
上呈现任何数据。
更新:
假设在这里
const result1 = cp.execSync('docker pull mongo:'+version);
我给出了错误的版本值,子进程失败。根据
execSync
语法,我无法使用回调函数来确定错误。
现在控制台确实显示了一些错误消息
Error response from daemon: manifest for mongo:a not found: manifest unknown: manifest unknown
child_process.js:660
throw err;
^
现在,如果我希望在我的 HMTL
<div>
上显示相同的消息,我该怎么办?
2个回答
关键是
捕获
服务器上的错误并将其返回到 HTTP 响应中。您不必使用
.json({ ... })
,但它往往很方便。
try {
cp.execSync(`docker pull mongo:'+version`);
res.status(200)
} catch (error) {
// catch the error and return it's message to the client
res.status(500).json({ error: error.message })
}
error.message
往往具有您描述的消息类型,但您也可以访问其他字段,如堆栈跟踪等。由于服务器返回 statusCode 500,这将触发
error
回调,因此您需要将该处理程序添加到您的请求中,然后将消息添加到 DOM。
$.ajax({
url: "http://localhost:8090/api/route1",
type: 'POST',
dataType:'json',
success: function(res) {
console.log(res);
},
error: function(xhr, textStatus, errorThrown) {
// parse the JSON from the server
const json = JSON.parse(xhr.responseText);
// finally, set the div's text to the error
$("#errorReport").text(json.error);
}
});
});
Justin Bretting
2020-05-24
您可以尝试这个 -
<div id="errorReport"></div>
<script type="text/javascript">
$(document).ready(function(){
$("#errorReport").hide();
$.ajax({
url: "http://localhost:8090/api/route1",
type: 'POST',
dataType:'json',
success: function(res, status) {
if(status === 500){
$("#errorReport").show();
}
console.log(res);
}
});
});
</script>
在您的服务器上 -
try {
cp.execSync(`docker pull mongo:'+version`);
res.status(200)
} catch (error) {
//catch the error here and handle it accordingly by sending error response to client
res.status(500)
}
Vimal Munjani
2020-05-24