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 () {
//最终执行代码
})
Mongoose与bluebird结合使用实例的更多相关文章
- nodejs+mongoose操作mongodb副本集实例
继上一篇设置mongodb副本集之后,开始使用nodejs访问mongodb副本集: 1:创建项目 express 项目名称 2:npm install mongoose 安装mongo ...
- mongoose多条件模糊查询实例
mongoose多条件模糊查询 这是今天手头项目中遇到的一个问题,关于mongoose如何实现类似于SQL中 nick LIKE '%keyword%' or email LIKE '%keyword ...
- Mongoose 框架初学使用记录
嘛.... 最近由于需要使用HTTP服务端,原先是使用的Qt框架实现的HTTP服务端,然后发现有些缺陷导致我不得不放弃这个框架,也不是完全放弃,只是HTTP服务端这里不再使用Qt,用Qt做高并发真的有 ...
- node 通过mongoose实现 mongodb的增删改
node 通过mongoose实现 mongodb的增删改 新建文件test.js 内容如下: var mongoose = require('mongoose') , Schema = mo ...
- mongoose简单使用样例
新建文件 app.js 内容如下: var mongoose = require('mongoose') , Schema = mongoose.Schema; mongoose.connect('m ...
- [转] mongoose学习笔记(超详细)
名词解释 Schema: 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力 Model: 由Schema编译而成的假想(fancy)构造器,具有抽象属性和行为.Model的每一个实例(ins ...
- [转] Mongoose简要API
Mongoose是在node.js环境下对mongodb进行便捷操作的对象模型工具 因此,要使用mongoose,则必须安装node.js环境以及mongodb数据库.mongoose使mongodb ...
- Mongoose 利用实现HTTP服务
嘛.... 注意:这里是使用mongoose实现HTTP服务,非数据库使用. 最近由于需要使用HTTP服务端,原先是使用的Qt框架实现的HTTP服务端,然后发现有些缺陷导致我不得不放弃这个框架,也不是 ...
- 进击Node.js基础(二)
一.一个牛逼闪闪的知识点Promise npm install bluebird 二.Promise实例 ball.html <!doctype> <!DOCTYPE html> ...
随机推荐
- PS2鼠标+LCD12864实验——终于OK 了
抱着“不气馁.不放弃.誓不罢休.搞不定你我还能搞其他玩意吗”的心态,调试许久的PS2鼠标实验,终于在今天被我搞定了.发几张图显摆一下,嘿嘿... 左键按下+鼠标移动 右键按下+鼠标移动 中键按 ...
- Android 手机红外遥控器实现(转)
源:http://www.cnblogs.com/xiaochao1234/p/3615467.html 经过连续几天的编制,安卓手机代码终于完成了,目前已经将我宿舍,家里,集控室的红外遥控电气设备完 ...
- fuel 6.1自动推送3控高可用centos 6.5 juno环境排错(二)
https://docs.mirantis.com/openstack/fuel/fuel-6.1/ 由于在测试高可用时,我是用esxi虚拟机测试,测试过程中遇到了网络问题:虚拟机间网络不通,故从网络 ...
- 计算机学院大学生程序设计竞赛(2015’12) 1001 The Country List
#include<cstdio> #include<cstring> #include<cmath> #include<string> #include ...
- Linux中cat、more、less、tail、head命令的区别
一.cat 显示文件连接文件内容的工具 cat 是一个文本文件(查看)和(连接)工具,通常与more搭配使用,与more不同的是cat可以合并文件.查看一个文件的内容,用cat比较简单,就是cat后面 ...
- Cookie mapping技术
摘要: RTB竞价中的cookie mapping技术解决DSP的cookie跟ad change的cookie匹配问题. Cookie mapping分为两步:(1)google ad exchan ...
- mustache.js使用基本(三)
作者:zccst 本节要点是子模块(partials)和分隔符(delimiter)等 1,子模块(partials) /* {{>partials}}以>开始表示子模块,如{{> ...
- Sping--集合注入
UserDAOImpl.java: package com.bjsxt.dao.impl; import java.util.List; import java.util.Map; import ja ...
- Spring自学教程-jabc编程详解、RowMapper使用(三)
一.JDBC 1.JDBC的编程特点 静态代码+动态变量 = jdbc编程.在spring中动态变量可以用注入的形式给予.这样的编程方式适合包装成模板.静态代码构成了模板,而动态变量则是需要传入的参数 ...
- 25个Linux性能监控工具
一段时间以来,我们在网上向读者介绍了如何为Linux以及类Linux操作系统配置多种不同的性能监控工具.在这篇文章中我们将罗列一系列使用最频繁的性能监控工具,并对介绍到的每一个工具提供了相应的简介链接 ...