Попытка отобразить шаблон на основе результата из метода findOne () схемы mongoose - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь использовать идентификатор задачи, сгенерированный в mongoDB, для рендеринга шаблона, который принимает идентификатор задачи в качестве входных данных. Я новичок в node и mongoDB, поэтому прошу прощения за неправильные термины. Приведенный ниже метод findOne возвращает ноль для параметра данных в своей функции обратного вызова, хотя идентификатор задачи заполняется в URL.

Я пытался использовать exec () и цепочку then (), но реализация не приводит к заполнению данных. Также версия MongoDB - 3.4.

var express = require('express');
var router = express.Router();

router.get('/createTask', function(req, res) {
  var newTask = new Task();

  newTask.save(function( err, data) {
    if (err) {
      console.log(err);
      res.render('error');
    } else {
      res.redirect('/task/' + data._id);
    }
  })
});

router.get('/task/:id', function(req, res) {
  if (req.params.id) {
    Task.findOne({_id: req.params.id}, function(err, data) {
      if (err) {
        console.log(err);
        res.render('error');
      }

      if (data) {
        res.render('task', {data: data});
      } else {
        res.render('error');
      }
    })
  } else {
    res.render('error');
  }
});

module.exports = router;

Это должно сделать шаблон задачи с простым h1, добавленным в тест, но вместо этого возвращает пустую страницу.

1 Ответ

0 голосов
/ 15 апреля 2019

Я предполагаю, что _id - это поле типа ObjectID, что означает, что вы не можете сделать task.findOne({ _id: req.params.id }) и получить документ в аргументе данных функции обратного вызова.

Вместо этого используйте переменную oId вместо req.params.идентификатор в task.findOne ()

const mongo = require('mongodb');
const oId = new mongo.ObjectID(req.params.id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...