@NZCoder

Как обработать данные из бд?

Здравствуйте я новичок в Node Js.
Я взял данные из Mongo DB в виде массива, и передал на страницу, но вот EJS жалуется на функцию forEach, якобы это не функция.

Полный текст ошибки:
TypeError: D:\js\views\index.ejs:15
    13|     <!-- тут должны отображатся элементы из коллекций todos -->

    14| 

 >> 15|     <% todos.forEach(function(todos) {%>

    16|             <strong><%= todos.title %></strong>

    17|             <%= todos.text %>

    18|     <% }) %>


todos.forEach is not a function


Код:

var express = require('express')
var bodyParser = require('body-parser')
var MongoClient = require('mongodb').MongoClient

var app = express()

var urlencoderParser = bodyParser.urlencoded({ extended: false })

app.set('view engine', 'ejs');

app.use('/public', express.static('public'))

var db
var users
var todos

var MongoServer = new MongoClient("mongodb://localhost:27017/", { useNewUrlParser: true, useUnifiedTopology: true });
MongoServer.connect(function(err, client){
    db = client.db("NZcoder")
    users = db.collection('users')
    todos = db.collection('todos')

    if(err){
        return console.log(err);
    }

    console.log("Подключение к базе данных MongoDB успешно")
});

app.get('/', function(req, res) {
    res.render('index', {todos: todos.find().toArray()})
})

var port = 3000

app.listen(port, function() {
    console.log(`Сервер запустился в порте: ${port}`)
})


Как решить?
  • Вопрос задан
  • 83 просмотра
Решения вопроса 1
@Israfil22
todos.find() - возвращает указатель - Cursor.
toArray() - асинхронный метод - он возвращает промис.

app.get('/',  async (req, res) => {
    res.render('index', {todos: await todos.find().toArray()})
})


Ссылка на док
Листайте вниз до: toArray(callback) => {Promise}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы