2016-06-23 5 views
1

Вот проблема, я пытаюсь получить данные, которые я сохранил из mongodb, и показать их в таблице.Извлечение данных из mongodb

router.get('/page', function (req, res, next) { 
    var VariableWithNoName = listAllResults(); 
    res.render('page', {title: 'page', dbresults: VariableWithNoName}); 
}); 

А вот функция, которая должна получить данные из БД:

function listAllResults() { 
 
    mongo.connect(process.env.MONGODB_URI, function(err, db) { 
 
    assert.equal(null, err); 
 
    var results = db.collection('mydatabase').find(); 
 
    var show = '<table>'; 
 
    results.each(function(err, result) { 
 
     assert.equal(err, null); 
 
     if (result != null) { 
 
     show = show + '<tr><td>' + result['object']['BasicInfo[Name]'] + '</td></tr>'; 
 
     } else { 
 
     callback(); 
 
     } 
 

 
    }); 
 
    show = show + '</table>'; 
 
    return show; 
 
    }); 
 
}

А вот моя страница .hjs:

<div id="ListOfResults"> 
    <p> Here there should be the list: </p> 
    {{dbresults}} 
</div> 

Любой идея, что с ним не так?

Отредактировано: базовая structor

данных:

{ 
"_id": { 
    "$oid": "57626" 
}, 
"object": { 
    "BasicInfo[Name]": "Somethig" 
} 



2016-06-23T12:09:01.252374+00:00 heroku[router]: at=error code=H13 

desc="Connection closed without response" method=GET path="/page" host=test.herokuapp.com request_id=ee4b3c79-2884-4e1b-921f-772ae0a97b87 fwd="84.208.103.77" dyno=web.1 connect=0ms service=255ms status=503 bytes=0 
2016-06-23T12:09:01.256277+00:00 app[web.1]: /app/node_modules/mongodb/lib/mongo_client.js:388 
2016-06-23T12:09:01.256288+00:00 app[web.1]:    throw err 
2016-06-23T12:09:01.256289+00:00 app[web.1]:    ^
2016-06-23T12:09:01.273399+00:00 app[web.1]: npm ERR! npm v3.8.6 
2016-06-23T12:09:01.275035+00:00 app[web.1]: npm ERR!  node ./bin/www 
2016-06-23T12:09:01.275505+00:00 app[web.1]: npm ERR! Or if that isn't available, you can get their info via: 
2016-06-23T12:09:01.275805+00:00 app[web.1]: npm ERR! There is likely additional logging output above. 
2016-06-23T12:09:01.279232+00:00 app[web.1]: 
+0

Показать структуру БД. – Shrabanee

+0

Нет, что [Имя] является частью имени переменной. Я добавил структуру базы данных в вопросы. – Maziar

+0

'VariableWithNoName' дает html правильно? – Shrabanee

ответ

0

Там нет никаких результатов, так как результат от MongoDB в Node.js является асинхронным. Ваша функция listAllResults() должна принимать ответ в качестве аргумента, чтобы вы могли использовать этот обратный вызов в маршрутизаторе при вызове функции.

Рассмотрим рефакторинга кода для размещения асинхронной функции:

функции Async

function listAllResults(callback) { 
    mongo.connect(process.env.MONGODB_URI, function(err, db) { 
     assert.equal(null, err); 
     db.collection('mydatabase').find().toArray(function (err, results){ 
      if (err) throw err;   
      if (results != null) { 
       var show = '<table>'; 
       results.each(function(err, result) { 
        show = show + '<tr><td>' 
           + result['object']['BasicInfo[Name]'] 
           + '</td></tr>'; 
       }); 
       show = show + '</table>'; 
       callback(show); 
      } 
      else {  
       // return empty table 
       callback('<table></table>'); 
      }   
     }); 
    }); 
} 

Маршрут

router.get('/page', function (req, res, next) { 
    listAllResults(function (VariableWithNoName){ 
     res.render('page', {title: 'page', dbresults: VariableWithNoName}); 
    });  
}); 

Для получения более подробной информации о том, как для возврата значения из асинхронной функции, относятся к этим двум вопросам:

+0

Он бросает ошибку, и я понятия не имею, почему: – Maziar

+0

Что такое ошибка? – chridam

+0

Я добавил ошибку в тело вопроса – Maziar

Смежные вопросы