摘要:執(zhí)行安裝依賴項(xiàng),然后執(zhí)行啟動(dòng)程序。模板的內(nèi)容保存在內(nèi)存中,性能會(huì)得到顯著提升。視圖查找當(dāng)或被調(diào)用時(shí),會(huì)先檢查是否有文件在這個(gè)絕對(duì)路徑上。代碼清單修改了之前的實(shí)現(xiàn),給出照片被上傳時(shí)提供的名稱,比如
Express起步
安裝Express
一個(gè)最小的Express 程序
生成程序開發(fā)框架
Express猜不出你要用依賴項(xiàng)的哪個(gè)版本,所以你最好給出模塊的主要、次要及修
訂版本號(hào),以免引入意料之外的bug。比如明確給出"express":"3.0.0"
要添加模塊的最新版,比如這里的EJS,可以在安裝時(shí)給npm傳入--save標(biāo)記。
得到
不管express(1)什么時(shí)候生成package.json文件,你都需要安裝依賴項(xiàng)(如圖8-9所示)。執(zhí)行npm
install安裝依賴項(xiàng),然后執(zhí)行node app.js啟動(dòng)程序。在瀏覽器中訪問http://localhost:3000查
看程序
設(shè)置環(huán)境變量
這些環(huán)境變量會(huì)出現(xiàn)在你程序里的process.env對(duì)象中
盡管環(huán)境變量NODE_ENV源自Express,但現(xiàn)在很多Node框架都用它通知Node程序它在什么環(huán)
境中,默認(rèn)為開發(fā)環(huán)境。
如代碼清單8-3所示, app.configure()方法接受一個(gè)表示環(huán)境的可選字符串,以及一個(gè)函
數(shù)。當(dāng)環(huán)境與傳入的字符串相匹配時(shí),回調(diào)函數(shù)會(huì)被立即調(diào)用;
改變查找目錄
_dirname:
改變默認(rèn)視圖模板引擎
因?yàn)樵饶阃?-e 創(chuàng)建的程序,它會(huì)默認(rèn) 用ejs 作為視圖模板;
通過下面的設(shè)置可以改變默認(rèn)視圖模板
用文件擴(kuò)展名指定模板引擎
通過加后綴名的方式強(qiáng)制改變默認(rèn)模板
生產(chǎn)環(huán)境中會(huì)默認(rèn)啟用view cache設(shè)定,并防止后續(xù)的render()調(diào)用執(zhí)行硬盤I/O。
模板的內(nèi)容保存在內(nèi)存中,性能會(huì)得到顯著提升。
啟用這個(gè)設(shè)定的副作用是只有重啟服務(wù)器才能讓模板文件的編輯生效,所以在開發(fā)時(shí)會(huì)禁用它。
視圖查找當(dāng)res.render()或app.render()被調(diào)用時(shí), Express會(huì)先檢查是否有文件在這個(gè)絕對(duì)路徑上。
接著會(huì)找視圖目錄設(shè)定的相對(duì)路徑。
Express會(huì)嘗試使用index文件
視圖顯示虛假照片數(shù)據(jù)
列表路由
添加photos.list路由
在./app.js中引入photos模塊,訪問你剛剛寫好的exports.list函數(shù)。
為了在首頁/中顯示照片,要把photos.list函數(shù)傳給app.get()方法,它會(huì)把路徑/上的HTTP GET方法
映射到這個(gè)函數(shù)上
寫照片列表視圖的模板
將數(shù)據(jù)輸出到視圖中的方法
將本地變量直接傳給res.render()
用app.locals傳遞程序?qū)用娴淖兞?br> Express默認(rèn)只會(huì)向視圖中輸出一個(gè)程序級(jí)變量, settings,這個(gè)對(duì)象中包含所有用app.set()設(shè)定的值。比 如app.set("title", "My Application")會(huì)把settings.title輸出到模板中
為了方便, app.locals也被做成了一個(gè)JavaScript函數(shù)。當(dāng)有對(duì)象傳入時(shí),所有的鍵都會(huì)被合并
如果你有一個(gè)輸出了幾個(gè)函數(shù)的Node模塊helpers.js,可以像下面這樣把所有函數(shù)輸出到視圖中:
用res.locals傳遞請(qǐng)求層面的本地變量
處理表單和文件上傳實(shí)現(xiàn)照片上傳功能總共分三步:
? 定義照片模型;
? 創(chuàng)建照片上傳表單;
? 顯示照片列表。
設(shè)定照片上傳目的地址的定制配置項(xiàng)
實(shí)現(xiàn)照片模型
Mongoose的模型上有所有的CRUD方法(Photo.create、 Photo.update、 Photo.remove
和Photo.find),所以這樣就搞定了。
創(chuàng)建照片上傳表單
你要把照片目錄傳給POST處理器,并返回一個(gè)路由回調(diào),以便處理器可以訪問這個(gè)目錄。
把新路由添加到app.js中,放在默認(rèn)(/)路由下面:
處理照片提交
multipart()中間件(包含在bodyParser中),它會(huì)給你一個(gè)req.files對(duì)象,代表上
傳的文件,并把這個(gè)文件保存到硬盤中。
你可以通過req.files.photo.image訪問這個(gè)對(duì)象。上傳表單中的輸入域, photo[name],可以通過req.body.photo.name訪問到
顯示上傳照片列表
用Mongoose提供的Photo.find獲取你上傳的照片
創(chuàng)建照片下載路由 /photo/:id/download
在模板中添加標(biāo)記:
app.js中,在路由定義中找個(gè)你喜歡的地方把下面這條路由加進(jìn)去:
實(shí)現(xiàn)照片下載路由
設(shè)定下載的文件名
你可以用res.download()的第二個(gè)參數(shù)定義一個(gè)定制的文件名,在下載時(shí)取代默認(rèn)的原始
文件名。代碼清單8-21修改了之前的實(shí)現(xiàn),給出照片被上傳時(shí)提供的名稱,比如Flower.jpeg
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/89364.html
摘要:本文源碼簡(jiǎn)介之前剛?cè)腴T并做好了一個(gè)簡(jiǎn)而全的純?nèi)彝暗捻?xiàng)目,數(shù)據(jù)都是本地模擬請(qǐng)求的詳情請(qǐng)移步這里為了真正做到數(shù)據(jù)庫(kù)的真實(shí)存取,于是又開始入門了并以此來為之前的頁面寫后臺(tái)數(shù)據(jù)接口。 本文源碼:Github 簡(jiǎn)介: 之前剛?cè)腴Tvue并做好了一個(gè)簡(jiǎn)而全的純vue2全家桶的項(xiàng)目,數(shù)據(jù)都是本地 json 模擬請(qǐng)求的;詳情請(qǐng)移步這里:vue-proj-demo 為了真正做到數(shù)據(jù)庫(kù)的真實(shí)存取,于是又...
摘要:編程書籍的整理和收集最近一直在學(xué)習(xí)深度學(xué)習(xí)和機(jī)器學(xué)習(xí)的東西,發(fā)現(xiàn)深入地去學(xué)習(xí)就需要不斷的去提高自己算法和高數(shù)的能力然后也找了很多的書和文章,隨著不斷的學(xué)習(xí),也整理了下自己的學(xué)習(xí)筆記準(zhǔn)備分享出來給大家后續(xù)的文章和總結(jié)會(huì)繼續(xù)分享,先分享一部分的 編程書籍的整理和收集 最近一直在學(xué)習(xí)deep learning深度學(xué)習(xí)和機(jī)器學(xué)習(xí)的東西,發(fā)現(xiàn)深入地去學(xué)習(xí)就需要不斷的去提高自己算法和高數(shù)的能力然后...
閱讀 1393·2021-11-22 15:11
閱讀 2838·2019-08-30 14:16
閱讀 2755·2019-08-29 15:21
閱讀 2914·2019-08-29 15:11
閱讀 2451·2019-08-29 13:19
閱讀 2985·2019-08-29 12:25
閱讀 417·2019-08-29 12:21
閱讀 2829·2019-08-29 11:03