兄弟姐妹们,我正在构建一个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_。我已经尝试分配这个res
和res.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