Без аргумента err я получаю null - PullRequest
1 голос
/ 26 мая 2020

Я изучаю Express с Mongoose и визуализирую страницу, на которой я запускаю forEach в списке «кемпингов» из MongoDB. Насколько я понимаю, при запуске функции .find необязательно передавать аргумент err и запускать оператор if. Но когда я полностью удаляю аргумент err и оператор if, я получаю сообщение «не могу запустить forEach на null, а когда я добавляю его обратно (никаких других изменений), мой код работает плавно. Не проблема, когда я добавьте его обратно, но я пытаюсь понять, что происходит в фоновом режиме. Заранее спасибо!

Приложение js код

//Create the camgrounds route
app.get("/campgrounds", function(req, res) {
    //Get Campgrounds from DB
    Campground.find({}, function(err, dbCampgrounds) {
        //check for error
        if (err) {
            console.log(err);
            //render the campgrounds page passing in the campground info from the db
        } else {
            res.render("campgrounds", {
                renderCampGround: dbCampgrounds
            });
        }
    });
});

И e js код файла

<div class="row">
  <% renderCampGround.forEach(function(x){ %>
    <div class="col-med-3 col-sm-6">
        <div class="thumbnail">
            <img src="<%= x.image %>">
        </div>
        <div class="caption">
            <h4 <%= x.name %>>
        </div>

        </div>
    </div>
    <% }); %>
</div>

1 Ответ

0 голосов
/ 26 мая 2020

Вы используете callback function, поэтому все обратные вызовы в Mon goose используют шаблон callback(err, data). Итак, если при выполнении запроса возникает error, параметры error будут содержать документ error, а data будет null. Если запрос выполняется успешно, параметр ошибки будет null. Но важно отметить, что отсутствие документа - это не error.

Если вы не укажете callback function, то API вернет переменную типа Query. Посмотрите .

Итак, если вы не хотите использовать callback function, это будет выглядеть так.

//Create the camgrounds route
app.get("/campgrounds", function(req, res){

    var campgrounds = Campgrounds.find({});

    //execute a query at later time
    campgrounds.exec(function (err, data) {

    if (err) {
     console.log(err)
    }
     else {
        console.log(data)
     }
   }):
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...