Node項目之評分系統(三)- Web開發

在數據庫設計完成以後,就能夠開始項目開發了,實實在在的編寫代碼了。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項目,寫的很差的地方請見諒,後續有可能對該項目進行進一步完善。

相關文章
相關標籤/搜索