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

时间:2018-06-06 09:54:45

标签: node.js error-handling

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

我很清楚以下方法是“非常粗略的机制”(来自Node文档),但我也知道domains已被折旧,并且涉及clusterssupervisor的解决方案我看过的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;
    }
}

1 个答案:

答案 0 :(得分:1)

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

但是,我假设您有办法响应用户请求(例如websockets)。所以你可以做这样的事情(虚拟代码):

ChartDataEntry(x: 0.5, y: 30)