我正在尝试使用在mongoDB中生成的任务ID呈现一个模板,该模板将任务ID作为输入。我是Node和mongoDB的新手,因此对任何错误的术语深表歉意。尽管任务ID填充在url中,但下面的findOne方法在其回调函数中为data参数返回null。
我尝试过使用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呈现任务模板以进行测试,但会返回空白页面。
答案 0 :(得分:0)
我的猜测是_id是一个ObjectID类型字段,这意味着您无法执行task.findOne({ _id: req.params.id })
并无法在回调函数的data参数中获取文档。
在task.findOne()中使用oId变量代替req.params.id
const mongo = require('mongodb');
const oId = new mongo.ObjectID(req.params.id);