在将其发送到客户端之前从 requestjs 转换有效负载
Transforming a payload from requestjs before sending it to the client
兄弟姐妹们,我正在构建一个 Express API 端点,需要使用外部 API,执行一些键和值的更改,并对结果进行 return客户端。这是我到目前为止所拥有的:
const external_endpoint = <external_api_end_point>;
app.get('/', function (req, res, next) {
request({ url: external_endpoint}).pipe(res);
});
这 return 是您直接点击 external_endpoint
将获得的确切有效载荷。
在发送给客户端之前,我不能做些什么来更改 res
吗?我尝试了几件事,但没有任何效果。与对传入有效负载进行转换相关的任何想法或最佳实践?
为了简单起见。假设这是有效载荷 obj.json
:
{
"sad": {
"userid": 5,
"username": "jsmith",
"isAdmin": true
}
}
我想将 sad
更改为 happy
。
我知道在请求之外我可以做这样的事情:
obj = JSON.parse(JSON.stringify(obj).split('"sad":').join('"happy":'));
但是用 obj
代替 res
是行不通的。我试过分配这个 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
兄弟姐妹们,我正在构建一个 Express API 端点,需要使用外部 API,执行一些键和值的更改,并对结果进行 return客户端。这是我到目前为止所拥有的:
const external_endpoint = <external_api_end_point>;
app.get('/', function (req, res, next) {
request({ url: external_endpoint}).pipe(res);
});
这 return 是您直接点击 external_endpoint
将获得的确切有效载荷。
在发送给客户端之前,我不能做些什么来更改 res
吗?我尝试了几件事,但没有任何效果。与对传入有效负载进行转换相关的任何想法或最佳实践?
为了简单起见。假设这是有效载荷 obj.json
:
{
"sad": {
"userid": 5,
"username": "jsmith",
"isAdmin": true
}
}
我想将 sad
更改为 happy
。
我知道在请求之外我可以做这样的事情:
obj = JSON.parse(JSON.stringify(obj).split('"sad":').join('"happy":'));
但是用 obj
代替 res
是行不通的。我试过分配这个 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