javascript - 用mongoose查询数据异步问题
巴扎黑
巴扎黑 2017-04-11 11:41:05
[JavaScript讨论组]

我需要将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)
黄舟

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);
})
天蓬老师

promise?

阿神

代码参考这里其实你想要的地方能够得到查询出来的结果。比如,现在有一个页面需要“宠物”数据。那么我就在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});
    });
};
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号