gpt4 book ai didi

javascript - Hapi 处理程序方法未返回值

转载 作者:行者123 更新时间:2023-11-29 05:49:42 33 4
gpt4 key购买 nike

我正在尝试将 hapi.js 与 mysql 连接起来。但是在定义一个 server.route 的时候。 处理程序 没有返回值。

    server.route({
method:'GET',
path:'/hello',
handler:function(request,h) {

connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
if (error) throw error;

console.log('The solution is: ', results[0].solution);

return ('The solution is: ', results[0].solution)
});

}
});

它说错误:处理程序方法没有返回值、 promise 或抛出错误

在这里,我返回 ('The solution is: ', results[0].solution) 但它仍然不起作用。

控制台输出的是解决方法是:2但是在浏览器中,是错误的。

请帮忙。谢谢

最佳答案

从 Hapi v17 开始,所有的路由处理程序都应该明确地返回一些东西。

正如您在错误中看到的那样,您没有返回任何值,因为您在不在主处理程序函数中的异步函数的回调中返回了一些内容。

你有几种选择来处理这个问题,第一个是将你的路由处理程序转换为 async 并将 await 用于异步函数,如下所示:

handler: async function (request, h) => {
const result = await connection.query('SELECT 1 + 1 AS solution')
return result // do something with sql result then return it;
}

注意:这仅在您的 connection.query 返回 Promise 而不是 NodeJS 回调样式时有效。如果没有,您可以查看utils.promisify。将带有回调的函数转换为 Promise 或手动将函数包装在 new Promise 中。

但是,如果您不想或不能使用 await/async,您仍然可以将带有回调的函数转换为 Promise,然后返回 Promise,但这会导致大量的 then 链接。

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的最后一个返回值。

关于javascript - Hapi 处理程序方法未返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55532702/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com