標籤:目錄 擷取 htm public size 屬性 json meta title
Node 原生 http 在某些方面不足以應對開發需求,所以就需要使用架構來加快開發效率
Express 是輕快簡潔的 Web開發架構,其實就是封裝的 http。使用教程可查看 官網教程,使用前先下載這個第三方包
npm install express --save
建立入口檔案 app.js
var express = require(‘express‘) //引包var app = express() //建立伺服器應用程式,相當於原來的http.createServer()//當伺服器收到get請求 / 時侯,執行回調處理函數app.get(‘/‘,function (req,res) { res.send(‘Hello Express‘) //原來Node的write()、end()等api依舊可以使用})app.listen(3000,function () { console.log(‘app is running at port 3000.‘)})
命令列執行 app.js,然後在瀏覽器發起請求,得到響應結果 Hello Express。這便是最簡單的 express應用
基本路由
指一種映射關係,或者說是導航,如 get 請求 / 時執行對應函數,post請求 /login 時執行其對應函數,每個請求都有對應的處理函數
請求方式、請求路徑和請求處理函數,就組成了一個路由
app.get(‘/‘,function (req,res) { //get res.send(‘Hello Express‘) })app.post(‘/login‘,function (req,res) { //post res.send(‘Nice to meet you‘) })
靜態資源
公開指定目錄供外界訪問
//當請求路徑為/public開頭時,可訪問public目錄中的資源app.use(‘/public‘,express.static(‘./public/‘))/*若省略第一個參數,則訪問時直接寫資源名,如public下有a.jpg,則http://127.0.0.1:3000/a.jpg可以訪問,
http://127.0.0.1:3000/public/a.jpg則訪問不到*/app.use(express.static(‘./public/‘))//第一個參數不一定代表真實目錄名,也可以起別名,只有/abc開頭的請求才能訪問public目錄下的資源app.use(‘/abc‘,express.static(‘./public/‘))
Express中使用art-template
要先安裝 art-template 和 express-art-template
express-art-template 專門將 art_template 整合到 Express,因為 express-art-template 依賴了 art-template,所以兩者都要npm下載
npm install --save art-template express-art-template //一次性安裝多個包
配置
//配置使用art-template模板引擎,第一個參數表示使用art-template來渲染.html結尾的檔案app.engine(‘art‘,require(‘express-art-template‘))app.get(‘/‘,function (req,res) { //Express為response對象提供了render()方法,預設不可用,配置了模板引擎才能使用 //res.render(‘html模版名‘,{模板資料}),會自動讀取檔案,渲染資料.第二個參數可省略,也就是不渲染直接輸出 res.render(‘index.html‘,{ title:‘使用者資訊‘, content:‘這是內容‘ })})
Express有個約定,希望開發人員把所有的視圖檔案都放到 views 目錄中
render() 方法第一個參數不能寫路徑,預設會從項目中的views目錄尋找該模板檔案
index.html模板和項目結構
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>{{ title }}</title></head><body> <p>{{ content }}</p></body></html>
修改預設的 views 視圖渲染儲存目錄
//第一個參數不是路徑,是指預設的views目錄,第二個參數是路徑app.set(‘views‘, ‘自訂目錄‘)
中介軟體
get 請求是通過 url 拼接字串的方式將參數傳給後台
而無論是原生 http 還是 express 的 http,都已將查詢字串作為屬性封裝到了 request 中,所以直接 request.query 即可擷取瀏覽器發來的值
post 請求將資料放在請求體中,而 Express 沒有提供相應 API 來擷取 post 請求體,但可利用第三方外掛程式
Express 的中介軟體 body-parser 就是專門解析 post 請求的,所謂中介軟體應該就是為了增加功能的中間外掛程式
先下載 body-parser 中介軟體,注意不要少個 r
npm install --save body-parser
再按教程配置
var express = require(‘express‘)var bodyParser = require(‘body-parse‘) //引包var app = express()//配置body-parser,只要加了這個配置,在在req請求對象上會多一個body屬性app.use(bodyParser.urlencoded({ extended:false }))app.use(bodyParser.json())app.post(‘/post‘,function (req,res) { console.log(req.body) //輸出結果為對象})
Express 的重新導向,無論是 send() 還是 redirect() , Express 都會幫我們 end() 來結束響應
// res.statusCode = 302
// res.setHeader(‘Location‘,‘/‘)// res.end()res.redirect(‘/‘) //以上三步是Node的寫法,依舊可用,但現在封裝好了,可直接一句代碼實現重新導向
nodemon
使用 window 的命令列工具,修改代碼後要手動重啟伺服器,使用 nodemon 可自動重啟,它是基於Node.js開發的的一個第三方命令列工具
npm install --global nodemon //要全域安裝,可在任意目錄執行此命令,用--global安裝的包可在任意目錄執行
安裝後通過 nodemon -v 命令查看版本號碼檢查是否安裝成功,之後執行命令時把 node 換成 nodemon 即可
只要是通過 nodemon 啟動的服務,它會檢查檔案的變動然後自動重啟伺服器,每次修改代碼儲存(Ctrl + s)後會自動重啟伺服器
nodejs 入門-Express