javascript - 用mongoose查询数据异步问题

 oq198608104_765 发布于 2022-11-11 22:42

我需要将find()的查询结果暴露给其他页面,但是find()查询操作是异步的,该如何实现呢?

var settings = require ("./settings");
var mongoose = require('mongoose');
var db = mongoose.connection;
var Schema = mongoose.Schema;
mongoose.connect('mongodb://'+settings.host+'/'+settings.db);
var articleSchema = new Schema({
  title    : String,
  author   : Array,
  aclTitle : Array,
  creation : Array,
  brife    : Array
});
var articleModel = mongoose.model('articles',articleSchema);
var articleEntity = new articleModel({});
db.on('error',function(){
  console.log("连接出现错误")
});
db.once('open',function () {
  console.log("连接成功!")
});
articleModel.find(function(e,d) {
  module.exports = d;//我这里想把查询结果exports出去,另一个页面require进来
})                   //但是因为是异步的,写在回调里,别的页面require进去是空对象,
                     //写在回调外面,那就取不到这个查询结果
3 个回答
  • 代码参考这里其实你想要的地方能够得到查询出来的结果。比如,现在有一个页面需要“宠物”数据。那么我就在req里取出来这个宠物的id,然后用宠物model查找这个id的宠物。
    具体做法一次是callback方式,promise方式,自定义方法的callback方式和自定义方法的promise方式:

    var getPet = function(req, res) {
        // Pet.findById(req.params.pet_id, function (err, pet) {
        //     if (err) {
        //         res.json({message: 'error', data: err});
        //         return;
        //     }
        //     res.json({message: 'done', data: pet});
        // });
    
        // Pet.findById(req.params.pet_id).then(function(p) {
        //     res.json({message: 'done', data: pet});
        // }).catch(function(err) {
        //     res.json({message: 'error', data: err});
        // });
    
        // Pet.anotherFindOne({'_id': req.params.pet_id}, function(err, pet) {
        //     console.log('Pet.anotherFindOne');
        //     if (err) {
        //         res.json({message: 'error', data: err});
        //         return;
        //     }
    
        //     res.json({message: 'done', data: pet});
        // });
    
    
    
        Pet.anotherFindOne({'_id': req.params.pet_id}).exec().then(function(pet) {
            res.json({message: 'done', data: pet});
        }).catch(function(err) {
            res.json({message: 'error', data: err});
        });
    };
    
    2022-11-12 15:32 回答
  • promise?

    2022-11-12 15:32 回答
  • mongoose 有两种调用方式,1种callbacl,1种promise。

    比如定义个getAll
    1.callback

    a.js
    回调形式,外面
    function getAll(cb){
        xxModel.find({},cb);
    }
    module.exports.getAll=getAll;
    
    b.js
    var a=require('a');
    a.getAll(function(err,result){
        console.log(result);
    })

    2.promise

    a.js
    function personTest() {
      return Person.find({}).exec();
    }
    
    b.js
    var a=requre('a');
    a.getAll().then(fnction(rseult){
        console.log(result);
    }).catch(function(err){
        console.log(err);
    })
    2022-11-12 15:32 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有