【发布时间】:2019-04-25 12:23:56
【问题描述】:
我正在创建一个摄影网站,最终我想为用户添加功能以查看数据库中的下一张照片。我是 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)
})
})
但是,这只给了我数据库中的第一个或最后一个项目。根据this 链接,我必须用{ _id: -1 } 替换{_id: {$gt: curId}}。我没有使用 jQuery,那我该如何重写呢?
【问题讨论】:
-
你不需要需要使用回调,你也可以使用从 Mongoose 返回的 Promise.... 但是如果你不熟悉其中任何一个这些概念我个人建议你从学习 Node 的基础知识开始。另外,mongoose docs中也有例子。
-
不要相信您在找到的第一篇文章中看到的内容。从 2016 年开始,如果答案有任何可信度,那么它的投票数将大大超过 1。正如评论所说 “阅读文档 first”。一旦您看到文档中的内容,您就可以提出问题并阅读其他人的答案。它说
Photo.find({}).sort({ _id: 1 }).limit(1).then( docs => console.log(docs[0]._id) )。与现在链接的更规范和投票率更高的答案的另一个要点一样。 -
或者
Photo.findOne({}).sort({ _id: 1 }).then( doc => console.log(doc) )
标签: javascript node.js mongoose