前段時間在慕課網上看了 scott 大神的《node+mongodb建站攻略》課程,按照自己的思路做了一遍,發博客記錄一下
一、項目介紹
這個項目是一個簡單的電影網站,由首頁、詳情頁、評論列表三個頁面構成
其中首頁展示所有電影;詳情頁展示指定電影的詳細信息,並具備提交評論的功能;評論頁展示所有的評論信息(原計划是放在后台管理里面的,后來懶癌發作,就不做后台了)
效果如下:

項目使用 SQL Server 2008 做數據庫(電腦上有現成的),Express 框架搭建服務,前端頁面都是通過 jade 模板引擎生成,為了少寫點 css 就引入了 Bootstrap (懶...)
GitHub 地址:https://github.com/wisewrong/node-test
網站鏈接:http://www.wisewrong.com/
歡迎拍磚~
二、配置路由
首先使用 express 創建一個項目
express node-movie
因為使用 SQL Server 作為數據庫,所以需要引入 mssql 模塊
然后還需要引入 bootstrap 和 jquery,所以在 package.json 中添加這幾個字段
然后 npm install 安裝依賴項
在 app.js 中能找到這樣的一段代碼
這里將 views 目錄設置為視圖目錄,用來存放靜態頁面,並且只識別 .jade 類型的文件
如果直接使用 .html 文件,就需要把第二行代碼改為
app.set('view engine', 'html');
但是通過模板引擎,在后端渲染頁面的效率更高
常用的模板引擎有 ejs 和 jade,通過 Express 搭建的項目會默認使用 jade,所以這里我們也使用 jade 寫模板
// jade 因為商標沖突,已經改名為 pug,但是 express 默認依賴還沒改名,就先繼續用 jade 吧
如果還不熟悉 jade 的語法,可以看一看這篇文章學習一下 https://segmentfault.com/a/1190000000357534

我一共寫了這五個模板,其中 error.jade 是 404 頁面,layout.jade 是基本結構,包含 header 和 footer
index.jade 是首頁,detail.jade 是詳情頁,list.jade 是評論列表
上一篇博客中提到,如果需要引入 css 或者 js,一般是css 和 js 文件拷貝到 public 目錄下,然后在頁面中引入
項目中需要引入 bootstrap,如果以這種方式引入,還得去 node_modules 目錄下找到對應的文件
所以我在 app.js 中添加了這一行代碼
app.use('/lib', express.static(path.join(__dirname, 'node_modules')));
這樣在 layout.jade 中引入的依賴文件的時候,就可以這么寫
頁面內容可以先忽略,先把路由給配置好

在 routes 目錄下創建三個頁面對應的 js 文件
然后在 app.js 中引入
在 app.js 中配置路由結點
然后在瀏覽器中打開項目,就能正確的渲染頁面了
三、創建數據
熟悉 SQL Server 的小伙伴可以跳過這一節,這部分只是介紹如何在 SQL Server 中創建簡單的數據
具體的頁面開發不再贅述,熟悉了 jade 的語法之后,寫起來還是很順手的
在開發頁面的時候,頁面上的數據可以先寫死,以方便查看頁面效果
頁面開發完成之后,再把數據挪到數據庫里面
在 SQL Server 中創建數據並不復雜,首先打開 SQL Server,連接本地服務器,創建一個登錄名

然后創建一個數據庫

展開剛才新建的數據庫,新建表
將 id 設為唯一標識,不可為 null,其他字段只設定數據類型即可
編輯完成后 CTRL+S 保存並命名(記住這個表名)
然后選擇剛才創建的表,右鍵 “編輯前200行”,然后錄入數據
四、連接數據庫
以首頁為例,在連接數據庫之前,頁面上需要這些參數:
為了獲取到 movies,需要連接數據庫,首先在 index.js 里面引入 mssql 模塊
關於 mssql 的詳細信息可以看這里(英文)https://www.npmjs.com/package/mssql
然后創建配置項:
連接數據庫
const sql = require('mssql') /* GET home page. */ router.get('/', function(req, res, next) { sql.connect(config).then(() => { // 插入SQL語句
return sql.query`select * from mytable` }).then(result => { res.render('index', { title: 'WiseWrong', movies: result.recordset //查詢結果
}); sql.close(); // 斷開數據庫的連接,很關鍵
}).catch(err => { res.render('error'); console.log('出錯了 ', err); }) sql.on('error', err => { res.render('error'); console.log('出錯了 ', err); }) });
上面的代碼是直接寫在 index.js 里面了,如果每個頁面都寫一套,肯定會有大量的重復性代碼,所以一定得封裝一下
如果是提交表單,只需要把接口地址改一改,然后處理數據,編寫SQL就行

