javascript - Mongoose 找到下一个对象

标签 javascript node.js mongoose

我正在创建一个摄影网站,最终我想添加让用户查看数据库中下一张照片的功能。我是 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,那么我该如何重写它呢?

最佳答案

您需要了解回调和 Promise。但对于你的答案,你可以像这样利用 mongoose 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 中 Promise 的基本用法。关于Promises的使用有很多文章,你可以很容易地找到它们,你可以去mongoose官方页面了解如何查询mongo并获取结果。

关于javascript - Mongoose 找到下一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53437378/

相关文章:

javascript - 如何使用 Uglify.js 为 Express.js 中的每个 View 连接 JavaScript

node.js - 一段时间后我可以从 mongoDB 文档中删除一个字段吗?

javascript - 如何连接字符串和变量以在 JavaScript 中创建新变量?

node.js - YAML 异常 : bad indentation of a mapping entry

Javascript sinon.js spy 在一个测试用例中工作,但在其他测试用例中不起作用

node.js - 通过 msbuild 的 Require.js 优化器不起作用,但直接在命令行上可以

node.js - 将 TypeScript 枚举与 Mongoose 模式一起使用

javascript - Mongoose findOneAndUpdate 后操作失败怎么办

javascript - jquery - 如何检查父元素是 tbody 还是 thead?

javascript - 为什么修改 String.prototype 后创建 jQuery 插件时出现 TypeError