標籤:
1.安裝express
npm install -g express-generator
4.0+版本中將命令工具分出來了,所以可以不安裝express,但必須要安裝express-generator
2.建立工程
初始化一個 express 項目並安裝所需模組,模板引擎預設格式是jade
express 檔案夾名
要建ejs格式,需要加上-e
cd 檔案夾名 && npm install
建立伺服器
node bin/www 或 supervisor bin/www
app.js:開機檔案,或者說入口檔案
package.json:儲存著工程的資訊及模組依賴,當在 dependencies 中添加依賴的模組時,運行 npm install,npm 會檢查目前的目錄下的 package.json,並自動安裝所有指定的模組
node_modules:存放 package.json 中安裝的模組,當你在 package.json 添加依賴的模組並安裝後,存放在這個檔案夾下
public:存放 image、css、js 等檔案
routes:存放路由檔案
views:存放視圖檔案或者模版檔案
bin:存放可執行檔
routes/index.js 路由檔案,相當於控制器,用於組織展示的內容:
var express = require(‘express‘);var router = express.Router();/* GET home page. */router.get(‘/‘, function(req, res, next) { res.render(‘index‘, { title: ‘Express‘ });});module.exports = router;
當訪問首頁時,調用jade模板引擎,來渲染 index.jade 模版檔案(即將 title 變數全部替換為字串 Express),產生靜態頁面並顯示在瀏覽器中。
index.ejs 模板檔案,routes/index.js調用的模板。功能是顯示引用的變數,即res.render函數第二個參數傳入的對象的屬性。
<!DOCTYPE html><html> <head> <title><%= title %></title> <link rel=‘stylesheet‘ href=‘/stylesheets/style.css‘ /> </head> <body> <h1><%= title %></h1> <p>Welcome to <%= title %></p> </body></html>
layout.ejs
預設情況下所有的模板都繼承自layout.jade,即block content是獨特的內容,其餘部分共有,可以看作是頁面架構、
3.路由控制
建立路由規則
在Index.js後添加
router.get(‘/‘, function(req, res, next) { res.render(‘index‘, { title: ‘Express‘ });});
路徑匹配
router.get(‘/user/:username‘,function(req,res) { res.send(‘user:‘ + req.params.username);})
路徑規則/user/:username會被自動編譯成Regex,類似於 \ /user\ /( [^\ /]+)\ /?的形式。路徑參數可以在相應函數通過req.params的屬性訪問。
REST風格的路由規則
REST:表徵狀態轉移,是一種基於HTTP協議的網路應用的介面風格,充分利用HTTP的方法實現統一風格介面的服務。
GET:請求擷取指定資源
POST:向指定資源提交資料
PUT:請求伺服器儲存一個資源
DELETE:請求伺服器刪除指定資源
這4種方法通常實現的功能
GET:擷取
POST:新增
PUT:更新
DELETE:刪除
express支援同一路徑綁定多個路由相應函數。但請求總是被前一條路由規則捕獲,但後面的規則會被忽略。
app.all(‘/user/:username‘, function(req, res) { res.send(‘all method captured‘);});app.all(‘/user/:username‘, function(req, res) { res.send(‘user: ‘ + req.params.username);});
路由控制權轉移的方法, 即回呼函數的第三個參數next,通過調用next(),會將路由控制權轉移給後面的規則。
router.all(‘/user/:username‘, function (req, res, next) { console.log(‘all method captured‘); next();});router.all(‘/user/:username‘, function (req, res) { res.send(‘user: ‘ + req.params.username);});
訪問http://localhost:3000/user/sura時,終端列印了‘all method captured,而且瀏覽器中顯示了user: sura。這說明請求先被一個條路由規則捕獲,完成console.log使用next()轉移控制權,又被第二條規則捕獲,向瀏覽器返回資訊。
可以實現中介軟體,而且能提高代碼的複用程度。
模板引擎
是一個頁面模板根據一定的規則產生HTML的工具。模板引擎的功能是將頁模板和要顯示的資料結合的HTML頁面,它既可以運行在用戶端又可以運行在伺服器端,大多數時候它都在伺服器端直接被解析為HTML,解析完成後再傳輸給用戶端。
在MVC架構中,模板引擎包含在伺服器端,控制權得到使用者請求後,從模型擷取資料,調用模板引擎。模板引擎以資料和頁面為輸入,產生HTML頁面,然後返回給控制器,由控制器返回給用戶端。
app.js設定模板引擎和頁面模板的位置
app.set(‘views‘, path.join(__dirname, ‘views‘));
app.set(‘view engine‘, ‘ejs‘);
routes/index.js的exports.index函數調用模板引擎
res.render(‘index‘, { title: ‘Express‘ });
res.render的功能是調用模板引擎,並將 其產生的頁面直接返回給用戶端。它接收兩個參數,第一個是模板的名稱,即views目錄下的目標檔案名,不包含副檔名;第二個參數是傳遞給模板的資料。
index.ejs
<h1><%= title %></h1>
<p>Welcome to <%= title %></p>
<% code %>:javascript代碼
<%= code %>:顯示替換過HTML特殊字元的內容
<%- code %>:顯示原始HTML內容
頁面配置
layout.ejs是一個頁面配置模板,它描述了整個頁面的架構結構,預設情況下每個獨立的頁面都繼承自這個架構,替換掉<%- body %>部分。因為一般為了保持整個網站的一致風格,HTML頁面的<head>部分以及頁首頁尾中的大量內容是重複的。
3.X版本後不支援layout
方法1:include
把index.html頁面切分成3個部分:header.html, index.html, footer.html
header.html, 為html頁面的頭部地區
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><title><%=: title %></title><!-- Bootstrap --><link href="/stylesheets/bootstrap.min.css" rel="stylesheet" media="screen"><!-- <link href="css/bootstrap-responsive.min.css" rel="stylesheet" media="screen"> --></head><body screen_capture_injected="true">
index.html, 為內容顯示地區
<% include header.html %><h1><%= title %></h1><p>Welcome to <%= title %></p><% include footer.html %>
footer.html,為頁面底部地區
<script src="/javascripts/jquery-1.9.1.min.js"></script><script src="/javascripts/bootstrap.min.js"></script></body></html>
方法2:自行添加layout
在package.json裡面的dependencies添加"express-partials": “*”
"dependencies": { "express": "3.1.0", "ejs": "*", "express-partials": "*" }
運行cmd並切換至項目目錄運行npm install獲得最新版
在app.js引用express-partials
var partials = require(‘express-partials‘);
在app.set(‘view engine’, ‘ejs’);下面添加app.use(partials());
使用node.js進行web開發