我在我的节点应用程序中寻找一个简单的错误处理解决方案,以便它不会在每个错误上失败。
我很清楚以下方法是“非常粗略的机制”(来自Node文档),但我也知道domains
已被折旧,并且涉及clusters
和supervisor
的解决方案我看过的process.on
非常复杂并且引入了其他问题。我只需要一种方法让我的节点服务器不会完全失败,并且每次发生任何错误时都不能为所有用户使用。
此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;
}
解决方案似乎运作良好。
但是,根据此解决方案,如何通知Web用户存在错误?
例如,这是一个在SQLite数据库上执行SQL的方法,如果有错误,我想将消息传递给调用此方法的代码,以便该代码可以将其传递给Web用户:
class MyClass{
@SerializedName("ID")
String ID;
@SerializedName("name")
String name;
@SerializedName("phone")
List<String> phone;
@SerializedName("city")
String city;
public MyClass(String ID, String name, List<String> phone, String city) {
this.ID = ID;
this.name = name;
this.phone = phone;
this.city = city;
}
public String getID() {
return ID;
}
public void setID(String ID) {
this.ID = ID;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<String> getPhone() {
return phone;
}
public void setPhone(List<String> phone) {
this.phone = phone;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
}
答案 0 :(得分:1)
出于安全原因,我不认为你真的想要详细通知你的用户系统错误。
但是,我假设您有办法响应用户请求(例如websockets)。所以你可以做这样的事情(虚拟代码):
ChartDataEntry(x: 0.5, y: 30)