我正在创建一个摄影网站,最终我想向用户添加该功能,以便用户查看数据库中的下一张照片。我是Web开发的新手,因此想逐步进行操作,因此,如果现在在控制台中显示下一张照片的ID,就足够了。这是我现在使用的代码:
var getPhoto = require("../public/modules/getPhoto")
router.get("/:id/next", function(req, res){
getPhoto.next();
res.redirect("/");
})
和
var Photo = require("../../models/photo");
var exports = module.exports = {};
exports.next = function(callback){
console.log(Photo.find({}).sort({_id: 1 }).limit(1)._id);
}
但是,这只会返回undefined
。
我读过here,我需要使用回调,但是即使使用链接示例中给出的代码,我也不知道如何实现。
如何将下一张照片的ID打印到控制台?
修改 我的代码现在看起来像这样:
// NEXT PHOTO - shows next photo
router.get("/:id/next", function(req, res){
Photo.find({}).sort({ _id: 1 }).limit(1).then(function(docs){
console.log(docs[0]._id)
res.redirect("/photos/" + docs[0]._id)
})
})
// PREVIOUS PHOTO - shows previous photo
router.get("/:id/previous", function(req, res){
Photo.find({}).sort({ _id: -1 }).limit(1).then(function(docs){
console.log(docs[0]._id)
res.redirect("/photos/" + docs[0]._id)
})
})
但是,这仅给我数据库中的第一项或最后一项。根据{{3}}链接,我必须用{ _id: -1 }
代替{_id: {$gt: curId}}
。我没有使用jQuery,那么该如何重写呢?
答案 0 :(得分:0)
您需要了解回调和Promises。但是对于您的答案,您可以像这样利用猫鼬exec
:
exports.next = function() {
return new Promise((resolve, reject) => {
Photo.find({}).sort({_id: 1}).limit(1).exec(function(err, photos) {
if (err) {
reject(err);
}
console.log('received: ', photos);
resolve();
}
}
}
然后在路由器中应该具有:
getPhoto.next().then(function() {
res.redirect('/');
});
这实际上是JS中Promises的基本用法。关于Promises用法的文章很多,您可以轻松找到它们,也可以转到mongoose官方页面,了解如何查询mongo并获取结果。