使用Express處理請(qǐng)求和托管靜態(tài)資源方式
Express
Express時(shí)基于Node.js平臺(tái),快速、開(kāi)放、極簡(jiǎn)的Web開(kāi)發(fā)框架。
通俗的理解:
Express的作用和Node.js內(nèi)置的http模塊類似,是專門用來(lái)創(chuàng)建Web服務(wù)器的。
Express的本質(zhì):
就是一個(gè)npm上的第三方包,提供了快速創(chuàng)建Web服務(wù)器的便捷方法
點(diǎn)擊前往 Express–Node.js Web應(yīng)用程序框架
Express對(duì)比Http模塊
http內(nèi)置模塊用起來(lái)很復(fù)雜,開(kāi)發(fā)效率低。Express是基于內(nèi)置的http模塊進(jìn)一部封裝出來(lái)的,能夠極大的提高開(kāi)發(fā)效率。
Express的主要作用
對(duì)于前端程序員來(lái)說(shuō),最常見(jiàn)的兩種服務(wù)器,分別是:
1.Web網(wǎng)站服務(wù)器:專門對(duì)外提供Web網(wǎng)頁(yè)資源的服務(wù)器
2.API接口服務(wù)器:專門對(duì)外提供API接口的服務(wù)器
使用Express,我們可以方便、快速的創(chuàng)建Web網(wǎng)站的服務(wù)器或API接口的服務(wù)器
Express安裝
npm i express
創(chuàng)建Web服務(wù)器:
// 1. 導(dǎo)入 express const express = require('express') // 2. 創(chuàng)建 web 服務(wù)器 const app = express() // 4. 監(jiān)聽(tīng)客戶端的 GET 和 POST 請(qǐng)求,并向客戶端響應(yīng)具體的內(nèi)容 // req:請(qǐng)求對(duì)象(包含了與請(qǐng)求相關(guān)的屬性與方法) // res:響應(yīng)對(duì)象(包含了與響應(yīng)有關(guān)的屬性和方法) app.get('/user', (req, res) => { ? // 調(diào)用 express 提供的 res.send() 方法,向客戶端響應(yīng)一個(gè) JSON 對(duì)象 ? res.send({ name: 'zs', age: 20, gender: '男' }) }) app.post('/user', (req, res) => { ? // 調(diào)用 express 提供的 res.send() 方法,向客戶端響應(yīng)一個(gè) 文本字符串 ? res.send('請(qǐng)求成功') }) app.get('/', (req, res) => { ? // 通過(guò) req.query 可以獲取到客戶端發(fā)送過(guò)來(lái)的 查詢參數(shù) ? // 注意:默認(rèn)情況下,req.query 是一個(gè)空對(duì)象 ? console.log(req.query) ? res.send(req.query) }) // 注意:這里的 :id 是一個(gè)動(dòng)態(tài)的參數(shù) app.get('/user/:ids/:username', (req, res) => { ? // req.params 是動(dòng)態(tài)匹配到的 URL 參數(shù),默認(rèn)也是一個(gè)空對(duì)象 ? console.log(req.params) ? res.send(req.params) }) // 3. 啟動(dòng) web 服務(wù)器 app.listen(80, () => { ? console.log('express server running at http://127.0.0.1') })
Express靜態(tài)資源處理
express.static()
express提供了一個(gè)非常好用的函數(shù),叫做express.static()通過(guò)它,我們可以非常方便地創(chuàng)建一個(gè)靜態(tài)資源服務(wù)器
例如,通過(guò)如下代碼就可以將public目錄下的圖片、CSS文件、JavaScript文件對(duì)外開(kāi)放訪問(wèn)了:
app.use(express.static('public'))
可以訪問(wèn)如下public目錄中的所有文件了(在瀏覽器通過(guò)本地ip訪問(wèn)):
const express = require('express') const app = express() // 在這里,調(diào)用 express.static() 方法,快速的對(duì)外提供靜態(tài)資源 app.use('/files', express.static('./files')) app.use(express.static('./clock')) //當(dāng)相對(duì)路徑報(bào)錯(cuò)的時(shí)候,換成絕對(duì)路徑即可 //app.use(express.static(path.join(__dirname, './clock'))) app.listen(80, () => { ? console.log('express server running at http://127.0.0.1') })
注意:Express在指定的靜態(tài)目錄下查找文件,并對(duì)外提供資源的訪問(wèn)路徑。因此,存放靜態(tài)文件的目錄名不會(huì)出現(xiàn)在URL中
托管多個(gè)靜態(tài)資源目錄
如果想要托管多個(gè)靜態(tài)資源目錄,請(qǐng)多次調(diào)用express.static()函數(shù)
app.use('/files', express.static('./files')) app.use(express.static('./clock'))
訪問(wèn)靜態(tài)資源文件時(shí),express.static()函數(shù)會(huì)根據(jù)目錄的添加順序查找所需要的文件
掛載路徑前綴
如果希望在托管的靜態(tài)資源訪問(wèn)路徑之前,掛載路徑前綴,則可以使用如下的方式
app.use('/public', express.static('public'))
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
socket.io學(xué)習(xí)教程之基礎(chǔ)介紹(一)
socket.io提供了基于事件的實(shí)時(shí)雙向通訊,所以下面這篇文章主要介紹了關(guān)于socket.io的相關(guān)資料,主要介紹了學(xué)習(xí)socket.io的基礎(chǔ)知識(shí),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-04-04node.js中module模塊的功能理解與用法實(shí)例分析
這篇文章主要介紹了node.js中module模塊的功能理解與用法,結(jié)合實(shí)例形式分析了node.js module模塊的基本功能、原理、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2020-02-02Node.js 中exports 和 module.exports 的區(qū)別
這篇文章主要介紹了Node.js 中exports 和 module.exports 的區(qū)別的相關(guān)資料,需要的朋友可以參考下2017-03-03node.js + socket.io 實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)隨機(jī)匹配聊天
這篇文章主要介紹了node.js + socket.io 實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)隨機(jī)匹配聊天,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06關(guān)于Node.js的events.EventEmitter用法介紹
本篇文章主要介紹了關(guān)于Node.js的events.EventEmitter用法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-04-04nodejs使用express創(chuàng)建一個(gè)簡(jiǎn)單web應(yīng)用
這篇文章主要介紹了nodejs使用express創(chuàng)建一個(gè)簡(jiǎn)單web應(yīng)用的相關(guān)資料,需要的朋友可以參考下2017-03-03node.js中的fs.writeFileSync方法使用說(shuō)明
這篇文章主要介紹了node.js中的fs.writeFileSync方法使用說(shuō)明,本文介紹了fs.writeFileSync的方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下2014-12-12Node.js API詳解之 string_decoder用法實(shí)例分析
這篇文章主要介紹了Node.js API詳解之 string_decoder用法,結(jié)合實(shí)例形式分析了Node.js API中string_decoder的功能、用法及操作注意事項(xiàng),需要的朋友可以參考下2020-04-04