hapi.js 与 mysql 连接未在浏览器上显示值

hapi.js connected with mysql is not showing the value's on browser

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

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

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

[ RowDataPacket { id: 1, code: 'test', description: 'bla', format: '12' }, RowDataPacket { id: 2, code: 'test2', description: 'test', format: '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();
        }
    }
};

这是 promise 的问题,我猜 mysql 没有 return 任何 promise。我该如何解决这个问题?

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

我假设您的 pool.query 方法正在返回一个承诺,因此您的代码可能是这样的。

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();
        }
    }
};