Передача параметра Node.js в запрос mongodb - PullRequest
3 голосов
/ 05 декабря 2011

Я работаю над простым веб-сервисом в node.js.Я использую хореограф для маршрутизации вызовов HTTP.Этот код работает нормально:

router.get('/search/*', function(req, res, term){
  res.writeHead(200, {'Content Type:':'text/plain'});
  db.collection('foo').find({'a':1}).toArray(function(err, items){
  console.log(items);
    res.write(JSON.stringify(items));
    res.end();
   });
  });

Как видите, метод find ищет {'a': 1}, все работает нормально, возвращается запись.Но когда я хочу передать поисковый термин от маршрутизатора к запросу, я получаю нулевой ответ:

router.get('/search/*', function(req, res, term){
  res.writeHead(200, {'Content Type:':'text/plain'});
  db.collection('foo').find({'a':term}).toArray(function(err, items){
  console.log(items);
    res.write(JSON.stringify(items));
    res.end();
   });
  });

Любые идеи кто-нибудь ??

Редактировать: я проверил значение термина, как предлагается ниже в комментариях, это 1, что я и ожидал.

Ответы [ 2 ]

1 голос
/ 06 декабря 2011

Я нашел обходной путь - создать новый объект json, а затем установить для параметра 'a' значение term, например,

var searchterm = {'a':2};
searchterm.a = term;

Я подозреваю, что в создании объектов JSON есть что-то, что я не до конца понимаю.

1 голос
/ 05 декабря 2011

Может ли быть, что db-соединение занимает больше времени, чем фактическая маршрутизация?

Если вы определили «термин» и получили ответ, то, скорее всего, термин не найден в БД, или db-соединение каким-то образом перестает работать.

Одним из способов может быть инициализация и вызов db из функции обратного вызова.

router.get('/search/*', function(req, res, term){
  res.writeHead(200, {'Content Type:':'text/plain'});
  var db = new mongo.Db('dbname', server);
  db.open(function(err, db){
    db.createCollection("collection_name", function(err, collection){
      db.collection('foo').find({'a':term}).toArray(function(err, items){
        console.log(items);
      });
    });
  });
});

Если это сработает, вы можете добавить db.close ();

Резервирование для неправильного синтаксиса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...