先說明一下原因,由於本身前段時間在實習,實習期間爲了參與項目開發,粗略學習了下Vue、Vuex、Vue-Router,大體會一些基礎的。這裏也快要作畢業設計了,趁着放假回來的這兩天,學習下Node的相關知識,最主要的是學習了Express這個基於Node的web框架,我本身自己選的畢設題目也是有關Node的,天然而然地想去用Vue和Express來作一個先後端分離的項目,也算是爲畢業設計作準備了。下面進入正題。css
在接觸Express的時候,更多的是使用html、ejs、jade這樣的模板來實現的View層頁面開發。首先我沒有萌生直接在views目錄裏面,使用.vue後綴文件來代替相似.ejs模板文件的想法。 我首先想到的是,先把後端工程搭建起來,而後再用vue-cli生成前端vue工程,可是兩個工程基礎架構都建好了,可是怎麼將其二者有機地結合在一塊兒呢?html
以前本身在用Vue作項目的過程當中,也是先後端分離的,只不過前端是在一個工程,後端是Java的一個工程,那麼想要先後端交互,通常是將前端代碼打包好以後,放到後端工程的某個目錄下。 前端打包:vue-cli用的是webpack打包,運行npm run build
打包命令會在根目錄下生成一個dist文件夾,這個文件夾中包含前端的img,css,js文件。 在express中提供靜態資源:在使用express生成器生成的項目工程中,通常會將ejs模板文件放在views文件夾下,而後express有一個內置中間件,能夠解決訪問靜態資源的問題。前端
app.use(express.static('public')) //public是指的放置前端靜態資源的文件夾名稱,若是有不清楚的地方,能夠去express官網看看
一樣是訪問靜態資源,那麼在express.static()中間件中,寫入vue-cli打包好以後的dist文件夾名稱就好了,這下就能夠訪問前端工程下的靜態資源了。vue
Express+ejs(jade)模式下,呈現視圖模板的話主要是經過ejs(jade)模板渲染的方式,可是Express+Vue模式下,由於Vue是單頁應用,因此Express針對任何路由的處理,都會只返回一個頁面(html方式)。webpack
res.render('about')
來渲染並返回模板。about
指的就是views文件夾下的about.ejs模板文件。// 由於是單頁應用 全部請求都走/dist/index.html app.get('*', function(req, res) { const html = fs.readFileSync(path.resolve(__dirname, '../dist/index.html'), 'utf-8') res.send(html) })
這樣先後端分離也作好了,頁面訪問也ok,而後就能夠繼續開發前端頁面邏輯及後端路由處理及數據庫操做。web