Nodejs WebService数据库选择

时间:2018-08-06 21:38:09

标签: node.js database rest web-services class

我试图通过该类进行Nodejs数据库操作,我通过该路由的路由和方法到达模型,并且选择操作完成。 但是当我发送数据时,app.use中的数据“未定义”

路由代码

var Select = require('../models/queryClass');
obj = new Select();
router.use(function (req, res) {
    res.json(obj.Data(req.method, req.path))
});

模型代码

class Select {
    Data(metodh, path) {
        if (metodh == "GET" && path == "/data") {
            db.query("select * from data ", function (err, result) {
                if (err) {
                    return err;
                }
                else {
                    return result
                }
            })
        }
    }
};

1 个答案:

答案 0 :(得分:0)

问题在于匿名函数内部响应是异步发出的,而您实际上从未返回该函数外部的值。
尝试使用promises,它应该看起来像这样:

class Select {
    Data(metodh, path) {
        if (metodh == "GET" && path == "/data") {
            return new Promise((resolve, reject) => {
                db.query("select * from data ", function (err, result) {
                    if (err) {
                        reject(err);
                    }
                    else {
                        resolve(result);
                    }
                })
            });
        }
    }
};

要获得答案,您必须使用promise方法; (然后-抓住)

obj.Data(req.method, req.path)
   .then(result => console.log(result))
   .catch(err => console.log(err))

注意:我没有测试它,但是它应该可以工作。因为它是异步的,所以在您从未真正返回结果之前。