在将负载发送到客户端之前,从requestjs转换负载



兄弟姐妹们,我正在构建一个Express API端点,该端点需要使用外部API,执行一些键和值的更改,并将结果返回到客户端。以下是我迄今为止所拥有的:

const external_endpoint = <external_api_end_point>;
app.get('/', function (req, res, next) {
request({ url: external_endpoint}).pipe(res);
});

这将返回直接命中external_endpoint所获得的确切有效载荷。

res发送到客户端之前,我不是可以做些什么来更改它吗?我试了几件事,但都没用。有任何与对传入有效载荷进行转换相关的想法或最佳实践吗?

为了简单起见。假设这是有效载荷obj.json:

{
"sad": {
"userid": 5,
"username": "jsmith",
"isAdmin": true
}
}

并且我想要将CCD_ 4改变为CCD_。

我知道除了请求之外,我可以做这样的事情:

obj = JSON.parse(JSON.stringify(obj).split('"sad":').join('"happy":'));

但是用CCD_ 6代替CCD_。我已经尝试分配这个resres.body的值,但没有骰子。

感谢您的提前帮助!

如果您使用request-promise,您可以简单地制作一个新的响应并发送它,或者修改您返回的响应:

app.get('/', function (req, res, next) {    
request({ url: external_endpoint, json: true})
.then(response => res.json({ happy: response.sad })))
.catch(next);
});

(当然,您需要适当地处理错误(

如果你想把它作为一个流来处理(如果你有大量的数据,这是有意义的(,你可以使用原始的request模块,并使用event-stream来创建你的管道:

const es = require('event-stream');
const swapper = es.through(
function write(data) {
this.emit("data", data.replace("sad", "happy"));
},
function end() {
this.emit("end");
}
);
request({ url: external_endpoint})
.pipe(es.stringify())
.pipe(swapper)
.pipe(es.parse())
.pipe(res);

这里有一个沙箱来测试流处理:https://codesandbox.io/s/3wqx67pq6

最新更新