gpt4 book ai didi

node.js - 如何将Node中发生的错误传达给Web用户?

转载 作者:行者123 更新时间:2023-12-03 08:23:27 25 4
gpt4 key购买 nike

我正在我的节点应用程序中寻找一种简单的错误处理解决方案,以确保它不会在每个错误上都失败。

我很清楚以下方法是一种“非常粗糙的机制”(来自Node文档),但是我也知道domains已过时,并且涉及的clusterssupervisor的解决方案非常复杂,并且引入其他问题。我只需要一种方法,使节点服务器每次出现任何错误时都不会完全失败并且对所有用户不可用。

这个process.on解决方案似乎运作良好。

但是,使用此解决方案,如何通知网络用户错误?

例如,这是一种在SQLite数据库上执行SQL的方法,并且如果出现错误,我想向调用此方法的代码传递消息,以便该代码可以将其传递给Web用户:

exports.executeSql = function(sql) {

process.on('uncaughtException', function (err) {
console.log("ERROR: " + err); // WORKS, BUT ONLY SERVER-SIDE
return "There was an error but it was handled."; //IGNORED
});

var sqlite3 = require('sqlite3').verbose();
var db = new sqlite3.Database('data/main.sqlite');
var status = "error";

db.serialize(function() {
db.run(sql);
status = "ok"; //ALWAYS EXECUTED WHETHER THERE WAS AN ERROR OR NOT
});

db.close();

return status;
}

最佳答案

我不认为出于安全原因,您真的不想向用户详细通知系统错误。

但是,我假设您有一种方法可以响应用户的请求(例如,websockets)。因此,您可以执行以下操作(虚拟代码):

server.on('user_wants_something', function(err,req) {
var _res = executeSql('abc');
//error, send to user
if (_res.state === 1) {
server.send('return_user_wants_something_error', _res);
return;
}
...do normal request handling...
});

var executeSql = function(sql) {

process.on('uncaughtException', function (err) {
console.log("ERROR: " + err); // WORKS, BUT ONLY SERVER-SIDE
return {
state: 1, //error state
message: "There was an error but it was handled."; //error message
}
});
...
//good result
return {
state: 0, //clean state
message: [...my query data...] //result data
}
}

关于node.js - 如何将Node中发生的错误传达给Web用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50717430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com