Monday, 13 March 2017

Calling Google CSE API on Mongodb Array

I've been chewing on this for a few days and my solutions smell like 'anti-patterns'. I've been fighting async-ness and come to the conclusion I must be approaching this wrong. Can someone show me a better way?

I perform a mongodb search and return an array (mdb_results).

I want to call Google CSE on each record of mdb_results and append a new element to each Object in mdb_results.

While each call works independently, I'm unable to combine the results.

var MongoClient = require('mongodb').MongoClient;
var ObjectId = require('mongodb').ObjectId;
var url = 'mongodb://***:***@***.mlab.com:***/***';
var searchString = "\""+ 'FOO DOO' +"\"";
var ImageSearch = require('node-google-image-search');

router.get('/', function(req, res, next) {

MongoClient.connect(url, function(err,db){
  db.collection('mycatalog')
    .find({$text: {$search:searchString }})
    .toArray(function(err, mdb_results){

        ImageSearch('searchString', function(cse){ 

            mdb_results.forEach(function(mdb){ mdb.thumbs = cse; })

        }, 0,2);  

        res.send(mdb_results);

        });
    });
});



via Colin

No comments:

Post a Comment