node.js - 从从 3rd 方 api 返回的对象创建读取流
问题描述
我有一个一个来自第 3 方 api 的 JSON 对象,我想从中创建一个可读流,然后通过管道传输该 JSON 以创建一个 csv,然后将 csv 传输到客户端。如何从 JSON 对象创建可读流?
const fileName = `Data.csv`;
res.set('Content-Type', 'text/csv');
res.setHeader('Content-disposition', 'attachment; filename=' + fileName);
res.flushHeaders();
const rs = new stream.Readable({ objectMode: true });
rs._read = () => {};
// not really a 3rd party api, calling populate over http as data
// is in another database
const itemCursor = OfferItem.find(query)
.read('sp')
.sort('purchase_date')
.cursor();
itemCursor.eachAsync(async (offerItemData) => {
offerItemData = await UserService.populateUser(offerItemData,
{
path: 'purchased_by',
select: '_id first_name last_name email phone',
options: {
readPreference: 'secondaryPreferred'
}
});
offerItemData = await UserAddressService.populateUserAddress(offerItemData, {
path: 'delivery.user_address',
options: {
readPreference: 'secondaryPreferred'
}
});
const sku = offerItemData.sku_id ? offerItemData.sku_id : offerItemData._id;
const user = offerItemData.purchased_by;
const name = humanize.capitalizeAll(`${user.first_name} ${user.last_name}`);
const { email, phone } = user;
const coin = offerItemData.coin_price;
let address;
let pinCode;
let code = '';
const deliveryAddress = offerItemData.delivery.user_address;
if (deliveryAddress) {
address = `${deliveryAddress.basic}, ${deliveryAddress.area}, ${deliveryAddress.city_str}`;
pinCode = deliveryAddress.pin_code;
}
if (offerItemData.discount) {
code = offerItemData.discount.code;
}
// transform the data here
const data = {
sku,
name,
address,
pinCode,
phone,
email,
code,
coin
};
console.log(data);
rs.push(data);
});
rs.push(null);
rs.pipe(JSONStream.stringify()).pipe(jsonParser).pipe(res);
上面的代码不起作用。考虑从一个函数制作流,该函数将随着时间的推移返回填充的对象,但我不知道该怎么做。
解决方案
推荐阅读
- bash - 如何通过脚本回答 bash 箭头选择菜单
- c++ - 使用最小堆的优先级队列,能够在 O(log(n)) [向量方法] 处删除任何节点
- flutter - Flutter 想要导航到谷歌地图
- javascript - 使用 Ajax 将一些图像插入 div 后,猫头鹰轮播不显示
- jquery - vue 使用的 jquery mCustomScrollBar 问题
- bash - 在 Bash 中使用变量赋值的动态列表调用命令
- django - Django中的单元测试用例未执行
- pyserial - 如何从传入的串行端口数据创建动画图
- wordpress - 一页和多个不相关的网址?
- google-apps-script - “选择事件源”部分中缺少“来自表单”选项