hapi.js, связанный с mysql, не показывает значение в браузере - PullRequest
0 голосов
/ 14 мая 2019

Я пытался получить список некоторых данных из MySQL, используя hapi.js.Но я получаю эту ошибку

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 не возвращает никаких обещаний.Как я могу решить эту проблему?

1 Ответ

1 голос
/ 14 мая 2019

Вы уже используете асинхронный оператор, что означает, что вы можете использовать подход 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 в Обещание.

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