今天嘗試使用express + mongoose,構建了一個簡單的Hello world,實現如下功能:node
定義mongodb使用的Schema,一個Usergit
訪問/輸出Hello worldgithub
訪問/init向mongodb插入初始化數據web
訪問/users從mongodb中取數據,並以json方式發送到瀏覽器mongodb
各功能都是極簡單的試用,沒有用到複雜的功能,但也有必定的參考價值,但願對你們有所幫助。數據庫
本次使用到的模塊以下:express
mongoose
http://mongoosejs.com/
一個在nodejs中使用的對mongodb進行建模的工具,能夠定義一些Schema(定義每一個doc裏的字段名、類型、初始值、驗證條件等),增刪改查等,功能比較貼心。npm
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返回的查詢,減小嵌套json
在開始以前,先在項目目錄的根目錄下安裝各模塊:
npm install mongoose
npm install express
npm install express-mongoose
項目代碼放在這裏,可供參考:https://github.com/freewind/express-mongoose-demo
建立一個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
顯示以下:
建立一個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);
如今要把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
提示數據已經初始化。使用mongodb的控制檯,查詢結果以下:
看到數據的確已經插入到mongodb中了。
接着實現/users,查詢User數據,並以json格式返回到瀏覽器端。代碼很簡單,以下:
app.get(‘/users’, function(req, res) {
User.find(function(err, doc) {
res.json(doc);
});
});
打開瀏覽器,訪問http://localhost:3000/users
果真看到json數據過來了。
但看看這段代碼,裏面有兩個嵌套。若是數據再複雜一些的話,可能嵌套更多,就不易讀了。能不能想辦法讓它簡化一點呢?
下面就該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,截圖以下:
果真效果同樣。
若是去掉express-mongoose,會是什麼效果呢?讓咱們先去掉:
require(‘express-mongoose’);
再訪問:
如今返回的就是User.find()這個query的值,而不是查詢結果。