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的值,而不是查詢結果。

相關文章
相關標籤/搜索