【问题标题】:mysql connection rest servicemysql连接休息服务
【发布时间】:2018-03-09 17:31:17
【问题描述】:

尝试做一个简单的休息服务。其余服务用于从本地数据库中提取表。想要为安卓应用提供这个休息服务。

无法通过。然后阻止。尝试捕捉错误但没有成功。如果在第一个.then 中出错,您如何捕获错误 下面这段代码是 db.js,并建立了与数据库的连接。

var sqlDb = require("mysql");
var settings = require("../settings");

exports.executeSql = function (sql, callback) {

var conn = new sqlDb.createConnection(settings.dbConfig);
conn.connect()
// !! Error unhandled
.then(function () {
        var req = new sqlDb.Request(conn);
        req.query(sql)
            .then(function (recordset) {
                callback(recordset);
            })
            .catch(function (err) {
                console.log(err);
                callback(null, err);
            });
    })
    .catch(function (err) {
        console.log(err);
        callback(null, err);
    });
};

在建立连接后,下面的代码被执行。带错误处理。

var db = require("../core/db");

exports.getList = function (req, resp) {
    db.executeSql("SELECT * FROM employees", function (data, err) {
        if (err) {
            // throws back error to web
            resp.writeHead(500, "Internal Error", { "Content-Type": 
            "application/json" });
            resp.write(JSON.stringify({ data: "ERROR occurred:" + err }));
        } else {
            resp.writeHead(200, { "Content-Type": "application/json" });
            resp.write(JSON.stringify(data));
        }
        resp.end();
    });
};

为数据库等设置制作了一个单独的js文件。以相同的方式测试了我与数据库的连接。排除了该问题,但它在第一个 .then 上一直返回未处理的错误。我到现在都不熟悉方法。

我想我找到了问题所在。新的 sqlDb.Request(conn); .Request 在使用 mysql 时不可用。但是我该如何解决这个问题

【问题讨论】:

    标签: mysql node.js rest api methods


    【解决方案1】:

    如果你 catch() 一个错误,它将不会再次被捕获,而不会返回一个新的拒绝。像这样:

    conn.connect()
    .then(function () {
            var req = new sqlDb.Request(conn);
            // note the "return" here
            return req.query(sql)
                .then(function (recordset) {
                    callback(recordset);
                })
                .catch(function (err) {
                    console.log(err);
                    callback(null, err);
                    // note the line below
                    return Promise.reject(err)
                });
        })
        .catch(function (err) {
            console.log(err);
            callback(null, err);
        });
    };
    

    PS。你真的需要callback(),为什么不使用Promise?

    【讨论】:

    • 我取出回调并放入承诺,但一直未处理异常。它在.then
    • 我想我找到了问题所在。新的 sqlDb.Request(conn);使用mysql时.Request不可用。但是我该如何解决这个问题
    • 然后从这两个地方删除“新”。我之前没有对这些做出反应,但我真的不认为你应该在那里使用 new。
    • 取出了新的,但它仍然挂在 .then 上。我也不熟悉 Promise 方法。我会尝试将查询和错误处理放在同一个文件中。
    • 你用的是什么mysql库?我不认为npmjs.com/package/mysql 上的 promise 有任何支持,我自己包装了它以使用 promise 而不是回调。
    猜你喜欢
    • 2012-02-15
    • 2010-09-20
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    • 2018-10-26
    • 2016-04-28
    相关资源
    最近更新 更多