尝试根据猫鼬模式的 findOne() 方法的结果呈现模板



我正在尝试使用mongoDB中生成的任务ID来呈现一个将任务ID作为输入的模板。我是node和mongoDB的新手,所以我为任何错误的术语道歉。下面的 findOne 方法在其回调函数中返回数据参数的 null,尽管任务 ID 填充在 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 进行测试,但返回一个空白页。

我的猜测是_id是一个 ObjectID 类型字段,这意味着您无法执行task.findOne({ _id: req.params.id })并在回调函数的数据参数中获取文档。

而是使用 oId 变量而不是 task.findOne(( 中的 req.params.id

const mongo = require('mongodb');
const oId = new mongo.ObjectID(req.params.id);

最新更新