Javascript 显示来自HTTP请求hapi.js 17.2.0的响应

Javascript 显示来自HTTP请求hapi.js 17.2.0的响应,javascript,node.js,express,promise,hapijs,Javascript,Node.js,Express,Promise,Hapijs,我试图使用新的HapiJS 17显示一个页面,但它依赖于http请求。因此,基本上我使用一个RESTAPI,然后将其返回到新的响应工具包(也称为“h toolkit”),但它在控制台中给出了错误 错误:处理程序方法未返回值、承诺或引发错误 它还提供了一个浏览器错误 发生内部服务器错误 下面是我的代码(为了简单起见,我尽量简化代码,而不处理错误等) 仅供参考,同样的东西在Express中也能正常工作,没有任何问题(我猜它也适用于HapiJS 16 我在HapiJS 16中找到了这个示例 该错误建

我试图使用新的HapiJS 17显示一个页面,但它依赖于http请求。因此,基本上我使用一个RESTAPI,然后将其返回到新的响应工具包(也称为“h toolkit”),但它在控制台中给出了错误

错误:处理程序方法未返回值、承诺或引发错误

它还提供了一个浏览器错误

发生内部服务器错误

下面是我的代码(为了简单起见,我尽量简化代码,而不处理错误等)


仅供参考,同样的东西在Express中也能正常工作,没有任何问题(我猜它也适用于HapiJS 16

我在HapiJS 16中找到了这个示例


该错误建议您返回h的承诺,如下所示:

server.route({
  method: 'GET',
  path:'/a',
  handler: (req, h) =>
    new Promise(
      (resolve,reject)=> 
        Request
        .get('https://httpbin.org/ip')
        .on('data', function(data) {
          resolve(h.response('data:' + data));
        })
    )
});

这仅适用于Hapi.js 16

但是,根据以下说明,您不必归还任何东西,可以执行以下操作:

server.route({
  method: 'GET',
  path:'/a',
  handler: (req, res) =>
    Request
    .get('https://httpbin.org/ip')
    .on('data', function(data) {
      res('data:' + data);
    })
});

该错误建议您返回h的承诺。如下所示:

server.route({
  method: 'GET',
  path:'/a',
  handler: (req, h) =>
    new Promise(
      (resolve,reject)=> 
        Request
        .get('https://httpbin.org/ip')
        .on('data', function(data) {
          resolve(h.response('data:' + data));
        })
    )
});

这仅适用于Hapi.js 16

但是,根据以下说明,您不必归还任何东西,可以执行以下操作:

server.route({
  method: 'GET',
  path:'/a',
  handler: (req, res) =>
    Request
    .get('https://httpbin.org/ip')
    .on('data', function(data) {
      res('data:' + data);
    })
});

因为,hapijsv17.x是基于async/await的。 使用
const Request=require('Request-promise');

请求承诺:

以下代码更改:

server.route({
method: 'GET',
path:'/a',
handler: async function(req, h) {
  let response = await Request.get('https://httpbin.org/ip');
  return response;
 }
});

因为,hapijsv17.x是基于async/await的。 使用
const Request=require('Request-promise');

请求承诺:

以下代码更改:

server.route({
method: 'GET',
path:'/a',
handler: async function(req, h) {
  let response = await Request.get('https://httpbin.org/ip');
  return response;
 }
});

它给出了一个错误:)SyntaxError:await仅在async functionAppend'async'和functionCopy paste中有效您的答案仍然给出了错误。SyntaxError:意外标记)。当我试图编辑代码以适应您所说的内容时,它给出了错误:流必须有一个流2可读接口它在问题中使用“请求承诺”而不是“请求”链接:它给出了一个错误:)SyntaxError:Wait仅在async functionAppend“async”和functionCopy paste中有效您的答案仍然给出了错误。SyntaxError:意外标记)。当我试图编辑代码以适应您所说的内容时,它给出了错误:Stream必须有一个streams2可读接口,它在问题中使用“请求承诺”而不是“请求”链接:两个答案都给出了错误。第一个给出Debug:internal,implementation,error ReferenceError:promise未定义。第二个给出TypeError:res不是function@iEmad将承诺更改为承诺我如何在我的职能范围内调整承诺?因为我想写一个函数从处理程序调用它。对于重用来说,答案给出了错误。第一个给出Debug:internal,implementation,error ReferenceError:promise未定义。第二个给出TypeError:res不是function@iEmad将承诺更改为承诺我如何在我的职能范围内调整承诺?因为我想写一个函数从处理程序调用它。重复使用