sql >> データベース >  >> NoSQL >> MongoDB

エラー:スクレイピング時にETIMEDOUTを接続します

    コメントで説明されているように、同時に実行中のリクエストの最大数を制御したい場合は、Bluebirdを使用して次のようにかなり簡単に行うことができます:

    const Promise = require('bluebird');
    const rp = require('request-promise');
    
    router.get('/', (req, res) => {
    
        let collection = db.get().collection('foo');
        let collection2 = db.get().collection('test');
        collection.distinct('id', (err, idArr) => { // count: 3000+
            if (err) {
                // handle error here, send some error response
                res.status(501).send(...);
            } else {
                Promise.map(idArr, id => {
                    let url = 'https://externalapi.io/id=' + id
                    return rp(url).then(body => {
                        if (error) {
                            console.log(error)
                        } else {
                            let resp = JSON.parse(body);
                            // probably want to return a promise here too, but I'm unsure what DB you're using
                            collection2.insert(resp);
                        }
                    }).catch(err => {
                        // decide what you want to do when a single request fails here
                        // by providing a catch handler that does not rethrow, other requests will continue
                    });
                       // pick some concurrency value here that does not cause errors
                }, {concurrency: 10}).then(() => {
                    // all requests are done, send final response
                    res.send(...);
                }).catch(err => {
                    // your code may never get here (depends upon earlier .catch() handler)
                });
            }
        });
    });
    



    1. Node.js Mongoose .update with ArrayFilters

    2. mongodbの合計値を平均する方法は?

    3. $lookupへのMongodb集計引数は文字列である必要があります

    4. NotUniqueError:重複する一意のキーを保存しようとしました