与mysql连接的hapi.js没有在浏览器上显示值

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (28)

我试图使用hapi.js从mysql获取一些数据列表。但是我收到了这个错误

Error:  method did not return a value, a promise, or throw an error

但我可以在我的控制台中看到这些数据。

[RowDataPacket {id:1,代码:'test',描述:'bla',格式:'12'},RowDataPacket {id:2,代码:'test2',描述:'test',格式:'15'} ]

这是我的处理程序代码:

exports.getInfo = async (request, h) => {
    try {
            pool.query(`SELECT * FROM test`, (err, result) => {
            if (err) throw err;
            console.log(result);
            return h.response(result);    
        });

    } catch (e) {
        if (e.response) {
            switch (e.response.status) {
                case 404: return Boom.notFound();
                default: return Boom.failedDependency();
            }
        } else {
            return Boom.failedDependency();
        }
    }
};

这是承诺的问题,我猜mysql不会返回任何承诺。我该如何解决这个问题?

提问于
用户回答回答于

您已经在使用异步运算符,这意味着您可以在代码中使用async / await方法。

我假设你的pool.query方法正在返回一个promise,所以你的代码可能是这样的。

exports.getInfo = async (request, h) => {
    try {
        const result = await pool.query(`SELECT * FROM test`);
        return result;
    } catch (e) {
        if (e.response) {
            switch (e.response.status) {
                case 404:
                    return Boom.notFound();
                default:
                    return Boom.failedDependency();
            }
        } else {
            return Boom.failedDependency();
        }
    }
};

如果没有,那么您可以将您的pool.query方法转换为Promise。

const QueryResult = (query) => {
    return new Promise((resolve, reject) => {
        pool.query(`SELECT * FROM test`, (err, result) => {
            if (err) return reject(err);           
            return resolve(result)
        });
    })
}

exports.getInfo = async (request, h) => {
    try {
        const result = await QueryResult(`SELECT * FROM test`);
        return result;   
    } catch (e) {
        if (e.response) {
            switch (e.response.status) {
                case 404:
                    return Boom.notFound();
                default:
                    return Boom.failedDependency();
            }
        } else {
            return Boom.failedDependency();
        }
    }
};

扫码关注云+社区

领取腾讯云代金券