express之mongoose连接工具的使用
来源:互联网 发布:万界淘宝商txt全集下载 编辑:程序博客网 时间:2024/03/29 15:58
今天尝试使用express + mongoose,构建了一个简单的Hello world,实现以下功能:
定义mongodb使用的Schema,一个User
访问/输出Hello world
访问/init向mongodb插入初始化数据
访问/users从mongodb中取数据,并以json方式发送到浏览器
各功能都是极简单的试用,没有用到复杂的功能,但也有一定的参考价值,希望对大家有所帮助。
本次使用到的模块如下:
mongoose http://mongoosejs.com/
一个在nodejs中使用的对mongodb进行建模的工具,可以定义一些Schema(定义每个doc里的字段名、类型、初始值、验证条件等),增删改查等,功能比较贴心。
express http://expressjs.com
nodejs环境中的web framework,提供了比nodejs的原始api高一级的抽象,方便进行web编程,如router、request/response的处理等,有很多基于它的模块或框架
express-mongoose https://github.com/LearnBoost/express-mongoose
让express中的某些方法,如res.send等,支持mongoose返回的查询,减少嵌套
在开始之前,先在项目目录的根目录下安装各模块:
npm install mongoosenpm install expressnpm install express-mongoose
项目代码放在这里,可供参考:https://github.com/freewind/express-mongoose-demo
一、使用express创建一个Hello, world
创建一个app.js,内容如下:
var express = require("express");var app = express.createServer();app.get(‘/’, function(req, res) { res.send(‘Hello, world’); });app.listen(3000);
短短几行代码,创建了一个app server。它监听于端口3000,并且访问/时,会向客户端发送Hello world.
二、试用/
启动该程序:
node app.js
如果没有提示错误,说明启动成功。
打开浏览器,访问:http://localhost:3000
显示如下:
image
三、定义Models
创建一个models.js,用于定义程序中使用的model(主要是Schema)。内容如下:
var mongoose = require(‘mongoose’);var Schema = mongoose.Schema;// Define User schema var _User = new Schema({ email : String, name : String, salt : String, password : String });// export them exports.User = mongoose.model(‘User’, _User);
这里定义了两个Schema,一个User。为了简便好认,我在Schema前面加了一个下划线,当然你也可以使用其它命名,如UserSchema等。
在定义Schema时,还可以设一些默认值、验证什么的,但这里先忽略,毕竟是极简试用。
mongoose.model(‘User’, _User);
这一句中,第一个参数相当重要,它是给User这个schema,定义了一个名字。其它地方如果想使用这个model,可以这样:
var User = mongoose.model(‘User’)
但在这里,我们直接把它放在exports里了,更方便:
exports.User = mongoose.model(‘User’, _User);
四、/init
现在要把models.js导入到app.js中,并且定义一个/init,访问它时将会向数据库中插入一些数据。代码如下:
var express = require("express"); var mongoose = require(‘mongoose’);var models = require(‘./models’);var User = models.User;mongoose.connect(‘MongoDB://localhost/express-mongoose-demo’);var app = express.createServer();// init data. Use "get" to simplify app.get(‘/init’, function(req, res) { var user = new User({ email : ‘nowind_lee@qq.com’, name : ‘Freewind’ }); user.save(); res.send(‘Data inited’); });app.listen(3000);
首先导入了mongoose模块,以前之前定义的models.js。然后将models.User取出来供下面使用。
下面这句话用于连接mongodb,这里使用express-mongoose-demo
mongoose.connect(‘mongodb://localhost/express-mongoose-demo’);
接着定义/init,为了演示方便起见,这里使用http get,可直接在浏览器中访问该url。如果在真实程序中,应该使用app.post(‘/init’, …)
打开浏览器,访问:http://localhost:3000/init
image
提示数据已经初始化。使用mongodb的控制台,查询结果如下:
image
看到数据的确已经插入到mongodb中了。
五、/users
接着实现/users,查询User数据,并以json格式返回到浏览器端。代码很简单,如下:
app.get(‘/users’, function(req, res) { User.find(function(err, doc) { res.json(doc); }); });
打开浏览器,访问http://localhost:3000/users
image
果然看到json数据过来了。
但看看这段代码,里面有两个嵌套。如果数据再复杂一些的话,可能嵌套更多,就不易读了。能不能想办法让它简化一点呢?
下面就该express-mongoose出场了。
六、express-mongoose
express-mongoose项目就是为了简化express和mongoose。首先导入它:
require(‘express-mongoose’);
然后将/users方法改写成:
app.get(‘/users’, function(req, res) { res.send(User.find()); });
看这里,直接用res.send就直接发送了,不用传回调函数了,代码简单了很多。
重启app.js,再访问:http://localhost:3000/users,截图如下:
image
果然效果一样。
如果去掉express-mongoose,会是什么效果呢?让我们先去掉:
require(‘express-mongoose’);
再访问:
image
现在返回的就是User.find()这个query的值,而不是查询结果。
今天就到这里,以后将慢慢加入更多的功能.
本文转载至:http://blog.csdn.net/meegomeego/article/details/38231941
- express之mongoose连接工具的使用
- Express + Mongoose 基础使用
- Express 项目中使用 Mongoose
- MongoDB之Mongoose的使用
- MongoDB之Mongoose的使用
- MongoDB学习笔记之Mongoose的使用
- MongoDB学习笔记之Mongoose的使用
- mongoose数据查询之bluebird的使用
- node.js开发之express4.0使用mongoose连接mongodb
- Mongoose 之 Population 使用
- Mongoose 之 Population 使用
- Mongoose源码之接收连接
- nodejs之mongoose连接数据库的两种形式
- mongoose的使用
- 【Mongoose】$inc的使用
- mongoose的使用
- express手册之六,结合mongoose查询小demo
- nodejs/express+mongodb/mongoose
- JavaEE中的MVC(三)定制Struts——命令模式
- JavaScript获取网址栏中的参数
- 插件方式 webapi项目提供wcf 服务
- Python ftplib
- Npgsql使用入门(一)【搭建环境】
- express之mongoose连接工具的使用
- 动态规划初识(从dfs到dfs优化到动态规划顺推和逆推)
- opencv和vs 编译生成的程序如何运行在没有安装的电脑上
- 分清函数指针和指针函数
- VC++网络安全编程范例(11)-SSL高级加密网络通信
- 深入理解java嵌套类和内部类
- hjr学习-分类算法:BP神经元网络算法
- map排序及keyset顺序问题
- JDBC编程