问题描述
我有一些来自第 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);
以上代码不起作用。考虑从一个函数中制作流,该函数将随着时间的推移返回填充的对象,但我不知道该怎么做。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)