Начиная с Hapi v17, все обработчики маршрутов должны явно что-то возвращать.
Как вы можете видеть из своей ошибки, вы не возвращаете никакого значения, потому что возвращаете что-то в обратном вызове асинхронной функции, которой нет в функции основного обработчика.
У вас есть несколько вариантов решения этой проблемы, во-первых, необходимо преобразовать ваш обработчик маршрута в async
и использовать await
для асинхронных функций, таких как:
handler: async function (request, h) => {
await connection.query('SELECT 1 + 1 AS solution')
}
Примечание : Это работает, только если ваш connection.query
может вернуть Promise вместо стиля обратного вызова NodeJS. Если это не так, вы можете взглянуть на utils.promisify
, чтобы преобразовать функцию с обратным вызовом в Promise или вручную, поместив вашу функцию в new Promise
самостоятельно.
Однако, если вы не хотите или не можете использовать await / async, вы все равно можете преобразовать функцию с обратным вызовом в Promise, а затем вернуть Promise, но это может привести к большому количеству цепочек.
const { promisify } = require('util');
[...]
handler: function (request, h) {
const query = promisify(connection.query);
return query('SELECT fancy SQL')
.then(result => {
// do something with sql result
return result
})
}
Возвращаемое значение вашего маршрута будет последним возвращенным значением последнего .then
.