从第 3 方 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);

以上代码不起作用。考虑从一个函数中制作流,该函数将随着时间的推移返回填充的对象,但我不知道该怎么做。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)