Express + Mongoose 极简入门

Express + Mongoose 极简入门

今天尝试使用express + mongoose,构建了一个简单的Hello world,实现如下功能:node

  1. 定义mongodb使用的Schema,一个Usergit

  2. 访问/输出Hello worldgithub

  3. 访问/init向mongodb插入初始化数据web

  4. 访问/users从mongodb中取数据,并以json方式发送到浏览器mongodb

各功能都是极简单的试用,没有用到复杂的功能,但也有必定的参考价值,但愿对你们有所帮助。数据库

本次使用到的模块以下:express

  1. mongoose 
    http://mongoosejs.com/ 
    一个在nodejs中使用的对mongodb进行建模的工具,能够定义一些Schema(定义每一个doc里的字段名、类型、初始值、验证条件等),增删改查等,功能比较贴心。npm

  2. express 
    http://expressjs.com 
    nodejs环境中的web framework,提供了比nodejs的原始api高一级的抽象,方便进行web编程,如router、request/response的处理等,有不少基于它的模块或框架编程

  3. express-mongoose 
    https://github.com/LearnBoost/express-mongoose 
    让express中的某些方法,如res.send等,支持mongoose返回的查询,减小嵌套json

在开始以前,先在项目目录的根目录下安装各模块:

npm install mongoose

npm install express

npm install express-mongoose 

项目代码放在这里,可供参考:https://github.com/freewind/express-mongoose-demo

1、使用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.

2、试用/

启动该程序:

node app.js

若是没有提示错误,说明启动成功。

打开浏览器,访问:http://localhost:3000

显示以下:

image

3、定义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);

4、/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中了。

5、/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出场了。

6、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的值,而不是查询结果。

相关文章
相关标签/搜索