在數據庫設計完成以後,就能夠開始項目開發了,實實在在的編寫代碼了。node
這裏使用的是express
Web框架,因而大大簡化了HTTP方法以及路由訪問的實現過程。安裝完express
模塊後,建議同時裝上express-generator
項目生成器,快捷生成express項目初始目錄及必要文件。mysql
npm install --save express npm install express-generator -g
注意:express-generator
模塊須要全局安裝。git
安裝完express-generator
生成器後,在項目目錄下,運行express -e
命令,便可生成express項目目錄。github
例如:express -e ./test01
命令就是在當前目錄下建立一個以ejs
模版引擎的名叫test01的項目目錄。sql
建立完以後,進入項目目錄並安裝依賴包,執行以下命令:數據庫
cd ./test01 && npm install
安裝完以後,執行命令npm start
,一個Node Web項目就啓動了,打開瀏覽器輸入http://localhost:3000
就能夠看到express爲你準備的首頁了。express
因爲這裏使用的是MySQL
數據庫,Node項目中須要安裝MySQL
模塊以便使用MySQL數據庫。使用npm
包管理器很容易就能安裝完成。npm
npm install mysql --save
開始一個項目,最好是先把數據庫相關功能完成,因爲項目簡單,僅僅是表message
以及vote
兩個表的操做,因而數據庫的鏈接我所有寫在了一個文件上了 - db.js
(新建db文件夾,在其中新建db.js
),查看MySQL
模塊的README
文檔,大概知道了該模塊的使用方法。瀏覽器
PS. 在安裝了新的模塊而不會用的狀況下,最好是把模塊裏的
README
文檔瀏覽一遍,雖然大部分是英文的,可是好過各類百度。
-- 過來人忠告bash
看完文檔,使用了最簡單的鏈接方式,在db.js
中開始編寫代碼:
var mysql = require('mysql'); var options = { host: 'localhost', user: 'lupeng', password: '080910', database: 'vote' } // 獲取數據庫對象 function getConn (){ var client = mysql.createConnection(options); return client; } // 獲得管理員賬戶 exports.getAdmin = function(callback){ var client = getConn(); var statement = 'select username,password from user where Id = 1'; client.query(statement, function(errs,rows,fields){ callback(errs,rows); }); client.end(); }
這裏只是貼上了獲取管理員帳戶的方法示例,其餘獲取數據庫的方法能夠都寫在這個db.js
的文件裏,這裏就很少贅述,後面會附上項目代碼自行查看。
express提供了很是簡單的路由編寫方式,這裏分別使用了HTTP協議GET/
、/show
、/login
、/admin
、/add
以及/edit
來分別得到首頁、查看頁、登錄頁、後臺首頁、添加頁以及編輯頁。而後使用POST/
來實現投票;使用/del
來實現刪除;使用/edit
來提交更新;使用/add
來實現添加主題等。
這裏的代碼我自認爲寫的很是的亂,須要好好設計以及從新編寫,這裏就不貼出來。
在路由方法裏有個簡易的過濾器須要實現,也就是在用戶登錄後臺的時候,須要session
的一個保存以及獲取,來證實你是管理員。這裏我一樣採起了一個簡單的express中間件來實現了,也就是在訪問/admin
的時候,須要驗證seesion
,見下面簡要代碼:
/* 登錄權限 */ router.use(function (req, res, next) { db.getAdmin(function (errs, rows) { if (errs) { res.render('error', { message: errs, error: {} }); } else { var username = rows[0].username; var password = rows[0].password; if (req.session && req.session.username == username && req.session.password == password) { next(); } else { res.render('login', { title: '後臺登錄', info: '請登錄' }); } } }); });
這個中間件放在訪問/admin
的路由上,凡是對/admin
的全部訪問請求都須要通過該中間件來驗證是否存在session
,這樣就大概實現了管理員驗證的一個功能。固然,這裏還須要使用到express-session
的模塊,安裝並在app.js
中簡單配置便可。如下是這裏的簡要配置:
// session config app.set('trust proxy', 1); app.use(session({ secret: 'keyboard cat', resave: false, saveUninitialized: true, cookie: { maxAge: 1000*60*60*1 } }));
因爲沒有作登出功能,session
設置了失效時間爲1個小時。
大概的項目實現過程就寫到這裏,詳細能夠看下該項目源代碼 - vote-node - Coding.net or vote-node - Github.com。
因爲初次嘗試使用Node寫一個Web項目,寫的很差的地方請見諒,後續有可能對該項目進行進一步完善。