MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Błąd:połącz ETIMEDOUT podczas skrobania

Jak wspomniano w komentarzach, jeśli chcesz kontrolować maksymalną liczbę żądań, które są w locie w tym samym czasie, możesz użyć Bluebird, aby zrobić to dość łatwo w następujący sposób:

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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak używać zapytania agregującego z MongoItemReader w wiosennej partii?

  2. dodaj pola created_at i updated_at do schematów mangusty

  3. Używanie map/reduce do mapowania właściwości w kolekcji

  4. Jak mogę zwrócić tylko NIEKTÓRE pola ($projekt) z agregacji Mongodb, jednocześnie używając $match, $lookup AND $filter

  5. Operacja rozbrajania nie powiodła się dla modelu MongoMapper, nie można usunąć/usunąć klucza z modelu