javascript - Hapi.js 代理 - 在回复之前更改响应

标签 javascript node.js hapi.js

我正在尝试为我正在进行的新项目测试 Hapi.js 我的目标是在我的 Hapi 服务器上触发一个请求,这个请求将在使用 Hapi 代理的远程服务器上触发另一个请求,响应将只是来自远程响应的特定属性

要对此进行测试,必须向/api/type3/name 发出请求,这将调用对 GitHub 的 API 的 API 调用以获取用户对象

代码:

server.route({
    method: 'GET',
    path: '/api/type3/{name}',
    handler: {
      proxy: {
        mapUri: function(request,callback){
            callback(null,'https://api.github.com/users/'+request.params.name);
        },
        onResponse: function(err, res, request, reply, settings, ttl){
           console.log(res); 
           reply(res);
        },
        passThrough: true,
        xforward: true
      }
    }
});

上面代码的response是来自GitHub的response对象 现在我需要保存此响应,以便我可以对其进行操作并仅返回我需要的内容

但是当我调试包含大量数据的响应对象时,我无法在其中找到响应负载

那么如何从响应对象中只提取来自 GitHub 的响应呢?

非常感谢

最佳答案

res 对象是一个 http.IncomingMessage .如果您想使用响应主体,您需要先读取其中的所有数据。

执行此操作有 2 个选择。

1) 原版 Node

onResponse: function(err, res, request, reply, settings, ttl){

    var body = '';

    res.on('data', function (chunk) {
        body += chunk;
    });

    res.on('end', function () {
        console.log(body);  
        reply(body);
    });
}

2) 使用 Wreck(一个由 Hapi 开发的用于在 Node 中处理 HTTP 的模块)

var Wreck = require('wreck');

onResponse: function(err, res, request, reply, settings, ttl){
   Wreck.read(res, null, function (err, payload) {
       console.log(payload);
       reply(payload);
   });
}

关于javascript - Hapi.js 代理 - 在回复之前更改响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28263162/

相关文章:

javascript - 如何获取 Node.js 响应头和状态码?

javascript - 去除 JavaScript 列表中重复项的最佳方法是什么?

javascript - 错误 : ENOENT: no such file or directory, 打开 '../config.json'

javascript - NodeJS NPM Soap - 如何在没有回调的情况下链接异步方法(即使用异步或 Promise)?

node.js - Hapi catbox无法连接到redis服务器

javascript - 如何允许 Joi 中的任何其他键

authentication - 如何向 hapi 添加简单的 Passport 或基本身份验证

javascript - "blur"事件是否仅针对 HTML 表单对象触发?

javascript - 对经典和原型(prototype)继承 Javascript 的混淆

javascript - javascript 中对 undefined object 的引用