簡單啓動javascript
首先,新建一個項目工程目錄,而後在目錄下建立啓動文件app.js
。css
這裏會用到Express
框架來實現相關功能,因此,須要先安裝它。html
在啓動文件添加以下內容,來測試Express
框架是否引用成功。java
let express = require('express'); let app = express(); app.get('/', function (req, res) { res.send('Hello World!'); }); app.listen(80);
瀏覽器查看結果顯示"Hello World!"
,如收到響應信息則代表咱們項目的第一步已經成功搞定。jquery
項目已經啓動成功,下面咱們開始建立相關目錄,用於存儲不一樣的文件。ajax
public
目錄:存放靜態文件。mongodb
routes
目錄:存放路由文件。數據庫
views
目錄: 存放頁面文件。express
common
目錄:存放公共文件。npm
public
目錄(可不選),新建javascripts
、stylesheets
、images
三個目錄用以存儲js
、css
、img
相關文件。
這裏咱們內置了一些js
、css
文件來實現簡單頁面樣式和操做,在頁面視圖中直接使用便可,引用方法以下:
<link href="example/css/bootstrap.min.css" rel="stylesheet" > <script src="example/js/jquery.min.js" type="text/javascript"></script> <script src="example/js/bootstrap.min.js" type="text/javascript"></script>
添加文件
有了目錄,咱們開始添加文件,先來添加一個登陸頁面register.html
,便於管理和開發,統一把視圖頁面放到views
目錄下。
views
目錄,添加register.html
註冊視圖頁,以下簡單效果圖:
有了視圖頁面,咱們就能夠訪問它了,那要如何訪問呢,這裏就要使用到ejs
模板了,安裝方法npm install ejs --save
,引用以下:
app.set('view engine', 'html'); app.engine('.html', require('ejs').__express);
使用engine
函數註冊模板引擎並指定處理後綴名爲html
的文件。
設定視圖存放的目錄:
app.set('views', require('path').join(__dirname, 'views'));
若是是在本地項目中,咱們還要指定本地靜態資源訪問的路徑,以下設置:
app.use(express.static(require('path').join(__dirname, 'public')));
訪問註冊頁
有了視圖頁面,下面咱們就開始訪問它,app.js
文件部份內容,引入相關模塊資源,而後簡單訪問以下:
app.get('/', function (req, res) { res.render('register'); }); app.listen(80);
啓動訪問80
端口,如成功看到註冊頁面則表示項目已經運行成功,如未看到,查看相關錯誤信息,是否缺乏相關模塊,安裝和引用便可。
定義Schema
首先在common
目錄內添加models.js
文件用來保存各個集合的Schema
文件(集合屬性),也便於咱們查看和訪問,具體內容以下所示:
module.exports = { user: { name: {type: String, required: true}, password: {type: String, required: true}, gender: {type: Boolean, default: true} } };
有了集合的Schema
文件,如何訪問呢,接着咱們會介紹如何使用Model
模型操做這些屬性。
仍是common
目錄,咱們在新建一個公共方法 —— dbHelper.js
文件,來操做這些Schema
,由於後面還會涉及此問題,因此咱們寫成一個公共的方法,dbHelper
文件內容以下:
let mongoose = require('mongoose'), Schema = mongoose.Schema, models = require('./models'); for (let m in models) { mongoose.model(m, new Schema(models[m])); } module.exports = { getModel: function (type) { return _getModel(type); } }; let _getModel = function (type) { return mongoose.model(type); };
如上所示咱們經過getModel
可獲取集合的Model
模型就能夠對數據庫有實質性的操做了。
關於Model
,簡單介紹:由Schema
構造生成的模型,具備數據庫操做的行爲。
添加函數
關於dbHelper.js
文件裏方法的訪問很簡單,以下所示:
global.dbHelper = require('./common/dbHelper');
這裏咱們使用global
來定義全局變量dbHelper
,那麼dbHelper
就能夠在任何模塊內調用了。
而後咱們就開始修改register
視圖頁面,添加單擊事件,例如:
<input type="button" onclick="register()" value="注 冊">
對應register()
函數,大體以下:
function register() { //經過serialize()方法進行序列化表單值,建立文本字符串。 var data = $("form").serialize(); //例如:"username=張三&password=12345" $.ajax({ url: '/register', type: 'POST', data: data, success: function (data, status) { if (status == 'success') { location.href = 'register'; } }, error: function (res, err) { location.href = 'register'; } }) }
添加路由
這裏咱們須要新建一個文件register.js
,專門用來處理來自register
頁面的post
請求, 在後面還會有多個不一樣處理文件,因此統一管理在routes
目錄下,在實際開發中咱們可能須要針對不一樣文件請求給出相應文件的處理,因此咱們就作分開處理。
這裏register.js
文件處理get
和post
請求的相關代碼以下:
//app:express對象 module.exports = function (app) { app.get('/register', function (req, res) { res.render('register'); }); app.post('/register', function (req, res) { var User = global.dbHelper.getModel('user'), uname = req.body.uname; User.findOne({name: uname}, function (error, doc) { if (doc) { req.session.error = '用戶名已存在!'; res.send(500); } else { User.create({ name: uname, password: req.body.upwd }, function (error, doc) { if (error) { res.send(500); } else { req.session.error = '用戶名建立成功!'; res.send(200); } }) } }) }) };
register
的post
請求處理中,咱們使用了session(express-session模塊)
還有處理post
請求數據的body
屬性(body-parser和multer模塊
),需先安裝他們,而後引用便可,以下參考:
//引用模塊 var bodyParser = require('body-parser'); var multer = require('multer'); var session = require('express-session'); //調用中間件 app.use(bodyParser.json()); app.use(bodyParser.urlencoded({extended: true})); app.use(multer());
後面還會再次添加多個路由記錄,因此便於管理和訪問,咱們能夠把他們統一放到一塊兒,好比routes
目錄下新建index.js
文件專門用來存放添加的文件,代碼以下:
module.exports = function (app) { require('./register')(app); };
那麼咱們在app.js
文件中直接引用index.js
文件就能夠訪問這些文件了,在index.js
下寫入:
require('./routes')(app);//app:express對象
這裏咱們就一步到位,在register
的post
請求處理中咱們使用了express-session模塊
來保存相關信息,這裏咱們就使用中間件來傳遞這些提示信息,中間件內容以下所示:
app.use(function (req, res, next) { res.locals.user = req.session.user;//保存用戶信息 var err = req.session.error;//保存結果響應信息 res.locals.message = '';//保存html標籤 if (err) { res.locals.message = '<div class="alert alert-danger" style="margin-bottom: 20px;color: red;">' + err + '</div>' } else { next(); } });
這裏注意中間件的安放位置,還有咱們設置了變量message
併爲其簡單添加了樣式,這裏咱們在register
視圖裏就用它來做爲操做結果的信息提示,直接添加<%- message %>
到視圖第一個div
內便可。
關於註冊咱們基本已經準備就緒,開始打開鏈接數據庫並設置用戶過時時間(注意執行順序,應放置在首箇中間件位置),app.js
條件內容以下:
mongoose.Promise=global.Promise; mongoose.connect("mongodb://127.0.0.1/test"); app.use(session({ secret: 'secret', cookie: { maxAge: 1000 * 60 * 30 } }));
到這裏,註冊功能已經完畢,在用戶註冊的信息錄入中,咱們沒有進行相關的爲空、兩次密碼的不匹配等等驗證等等(可自行添加),趕忙註冊試試吧,本地的話能夠經過MongoVUE
(可視化客戶端)來查看數據是否成功寫入數據庫。