码迷,mamicode.com
首页 > 其他好文 > 详细

Mongoose与bluebird结合使用实例

时间:2017-01-17 14:13:07      阅读:406      评论:0      收藏:0      [点我收藏+]

标签:.exe   结构   exp   str   操作   ons   one   mod   mongodb   

  nodejs的所有调用几乎是全异步的,而所有的IO操作也都是通过回调函数才能知道结果。 如果一个异步调用依赖另一个异步调用,如果没有Promise的话,有可能陷入传说中的回调地狱。  

  bluebird实现了将异步回调写法转变为链式写法,并且扩展出了catch、finally、bind等api,如catch可以帮我们集中处理每次查询的error。

  网上找到的有关promise和bluebird的资料基本都是讲原理和理论,本文介绍的是bluebird实际使用例子。实操中,我们只用将需要使用链式的类和方法进行promisify就行,代码如下:

//引入数据库操作模块
var mongodb = require("./db")
    Promise = require("bluebird")
    ;

var mongoose = require("mongoose");

var Schema = mongoose.Schema;

//声明User Schema结构
var userSchema = new Schema({
    user_id: String,
    password: {type: String, default: ""},
    nickname: {type: String, default: ""},
    introduction: {type: String, default: ""},
    age: {type: String, default: ""},
    gender: {type: String, default: ""},
  
});


//将User类给予接口
var User = mongoose.model(User, userSchema);

//promise化user类及其方法
Promise.promisifyAll(User);
Promise.promisifyAll(User.prototype);

module.exports = User;

另外,下文用到的Room Schema也需要做上面的处理

使用方式如下:

Room.findOne({type:pano})
        // .exec()
        .then(function (room) {
            console.log(rooms:,room)
       //这里不再用回调的方式返回查询结果,而是将查询结果传递到下一个.then
return User.findOne({_id:room.creator}); }) .then(function (user) { console.log(user接收上一个.then传递的变量:,user) }) .catch(function (e) { //处理error }) .finally(function () { //最终执行代码 })

 

Mongoose与bluebird结合使用实例

标签:.exe   结构   exp   str   操作   ons   one   mod   mongodb   

原文地址:http://www.cnblogs.com/jarvisjin/p/6292694.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!