我正在尝试为我正在进行的新项目测试 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/