Mongoose与bluebird结合使用实例

  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 () {
            //最终执行代码
        })
时间: 2024-08-24 07:15:36

Mongoose与bluebird结合使用实例的相关文章

node 通过mongoose实现 mongodb的增删改

node 通过mongoose实现 mongodb的增删改 新建文件test.js 内容如下: var mongoose = require('mongoose') , Schema = mongoose.Schema; mongoose.connect('mongodb://localhost/test'); var BlogSchema = new Schema({ id : {type : Number, index : true} ,title : {type : String} });

DICOM:剖析Orthanc中的Web Server,Mongoose之 Flag bit & Event(三)

背景: Orthanc是本专栏中介绍过的一款新型DICOM服务器,具有轻量级.支持REST的特性,可将任意运行Windows和Linux系统的计算机变成DICOM服务器,即miniPACS.Orthanc内嵌多种模块,数据库管理简单,且不依赖于第三方软件.因此通过剖析Orthanc源码可以学习到搭建DICOM系统中的各个环节,例如SQLite嵌入型数据库.GoogleLog日志库.DCMTK医学DICOM库,以及近期要介绍的开源Web Server,Mongoose. 上一篇博文中简单的分析了M

Mongoose 框架初学使用记录

嘛.... 最近由于需要使用HTTP服务端,原先是使用的Qt框架实现的HTTP服务端,然后发现有些缺陷导致我不得不放弃这个框架,也不是完全放弃,只是HTTP服务端这里不再使用Qt,用Qt做高并发真的有点不好. 然后毅然的选择了mongoose这个框架,主要是听说这玩意 嵌入到代码中非常方便.下载之后发现果然就一个 h文件和cpp文件.. 于是开始研究这个框架,根据mongoose 用户手册再加上一堆实例教程,基本上写了一个类 进行操作封装(并不是完全的封装了) MoHttp.h文件主要是实现mo

Mongoose简要API

Mongoose是在node.js环境下对mongodb进行便捷操作的对象模型工具 因此,要使用mongoose,则必须安装node.js环境以及mongodb数据库.mongoose使mongodb操作更简单便捷.可以在github中获得其源码,也可以在这里查看api文档,英文的,文档内容较多,因此本文特意总结下mongoose的schema数据模型定义以及简单的增删改查api. connect connect 用于创建数据库连接 mongoose.connect(uri(s), [optio

[转] Mongoose简要API

Mongoose是在node.js环境下对mongodb进行便捷操作的对象模型工具 因此,要使用mongoose,则必须安装node.js环境以及mongodb数据库.mongoose使mongodb操作更简单便捷.可以在github中获得其源码,也可以在这里查看api文档,英文的,文档内容较多,因此本文特意总结下mongoose的schema数据模型定义以及简单的增删改查api. connect connect 用于创建数据库连接 mongoose.connect(uri(s), [optio

nodejs+express+ejs+mongoose实例

nodejs+express+ejs+mongoose实例 nodejs学得异常痛苦,在这里将学的东西做一番整理,算是自我安慰吧.根据网上todo示例,用express和mongoose重写了部分代码,主要是业务逻辑这块(CRUD),这个没什么难度.目前尚未解决的问题是:express不能使用ejs layout template,查了好久也没解决,知道的麻烦告诉我一下. 一.代码目录 二.第三方模块 1.express (1)express中文入门指引手册 (2)nodejs中文电子书 (3)

node.js + express(ejs) + mongodb(mongoose) 增删改实例

刚学node不久,以下是对最近学习的总结,不足的地方还请见谅. node 和 mongodb安装不做为本文讲解,想了解的朋友可以通过一下链接配置环境: node 安装:http://www.infoq.com/cn/articles/nodejs-npm-install-config Win7下MongoDB安装 :http://www.mkyong.com/mongodb/how-to-install-mongodb-on-windows/ MongoDB 安装步骤总结: 1.解压目录到d盘

Mongoose 表实例

1 /********** 用户表 BY Jaysir 2015.6.21 2 *********** 3 *********** 可搜索以下关键词来查看未实现功能 4 *********** 5 *********** TODO : 未完成 6 *********** DONE : 已完成 7 *********** TOTEST : 待测试 8 *********** NOTEST : 无需测试 9 *********** WAITING : 功能待定 10 *********** 11 *

node.js下mongoose简单操作实例

Mongoose API : http://mongoosejs.com/docs/api.html // mongoose 链接var mongoose = require('mongoose');var db       = mongoose.createConnection('mongodb://127.0.0.1:27017/NodeJS'); // 链接错误db.on('error', function(error) {    console.log(error);}); // Sch