亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

使用node+vue.js實現SPA應用

2019-11-20 10:40:19
字體:
來源:轉載
供稿:網友

業務需求

最近公司要求開發web版的app,由于app是偏向內容方面,而且帶了一個聊天模塊,所以一般的多頁開發不是很適合,而且主要是手機瀏覽,對加載速度或者用戶體驗來說都比較苛刻。調研了很多框架和模式,最后自己東拼西湊搞出來了這么一個玩意。

服務端

毫無疑問使用node,使用typescript可以有效的在編碼同時查錯,強類型語言寫服務端毫無壓力。

#app.ts 只貼重要代碼var webpack = require('webpack')var webpackDevMiddleware = require('webpack-dev-middleware')var WebpackConfig = require('./webpack.config')import * as index from "./routes/index";import * as foo from "./routes/foo";import * as bar from "./routes/bar";var app = express();//啟動服務的時候 打包并監聽客戶端用到的文件,webpackDevMiddleware是開發模式,他會打包js在內存里面,你改了文件,它也會重新打包app.use(webpackDevMiddleware(webpack(WebpackConfig), {  publicPath: '/__build__/',  stats: {    colors: true  }}));//一般的配置項app.set('views', __dirname + '/views');app.set('view engine', 'ejs');app.set('view options', { layout: false });app.use(bodyParser.urlencoded({ extended: true }));app.use(bodyParser.json());app.use(methodOverride());app.use(express.static(__dirname + '/public'));var env = process.env.NODE_ENV || 'development';if (env === 'development') {  app.use(errorHandler());}//路由配置app.get('/', index.index);app.get('/foo', foo.index);app.get('/bar', bar.index);app.listen(3000, function(){  console.log("Demo Express server listening on port %d in %s mode", 3000, app.settings.env);});export var App = app;

服務端渲染頁面

#index.tsimport express = require("express")import vueServer = require("vue-server") //服務端渲染vue的插件var Vue = new vueServer.renderer(); //創建一個服務端的vueexport function index(req: express.Request, res: express.Response) {  //創建一個組件  var vm = new Vue({    template: `    <p>This is index!</p>    `  });  //等待html渲染完成,再返回給瀏覽器 vueServer.htmlReady是vue-server的自帶事件  vm.$on('vueServer.htmlReady', function(html:string) {    //這里用的是ejs模板 可以把需要用到的數據設置成window下的全局變量,方便客戶端的js訪問。    res.render('layout',{server_html:html,server_data:'window.cm_data = {name:"張三"}'})  });};
#layout.ejs 訪問這個SPA的所有url返回的都是這個頁面 <meta>標簽都可以動態設置,只要傳參數進來就可以<!DOCTYPE html><html lang="en"><head>  <meta charset="utf-8">  <title>Vue Router Example</title>  <style>    .v-link-active {      color: red;    }  </style>  <script>    //定義一些前端需要用到的全局屬性,文章ID或用戶信息什么的    //index.ts中傳過來的是 window.cm_data = {name:"張三"}    //前端就能訪問到了    <%-server_data%>  </script></head><body>//這里的id是前端需要用到的一個標識<div id="app">  <h1>Hello App!</h1>  <p>    <a v-link="{ path: '/foo' }">Go to Foo</a>    <a v-link="{ path: '/bar' }">Go to Bar</a>  </p>  //router-view是客戶端vue-router需要解析的dom  //server_html是根據訪問url地址生成的html,是做SEO的重點,不加載下面的app.js也可以看到內容  <router-view> <%-server_html%> </router-view></div>//webpack打包好的js,主要是路由配置<script src="/__build__/app.js"></script></body></html>

客戶端

#app.js 這個是/__build__/app.js,可以用es6編寫,webpack會轉換的import Vue from './vue.min' //客戶端的vue.jsimport VueRouter from './vue-router.min' //vue的路由插件,配合webpack可以很簡單實現懶加載//懶加載路由 只有訪問這個路由才會加載jsimport Foo from 'bundle?lazy!../../components/foo' //配合webpack的bundle-loader,輕松實現懶加載import Bar from 'bundle?lazy!../../components/bar'import Index from 'bundle?lazy!../../components/index'var App = Vue.extend({})Vue.use(VueRouter)var router = new VueRouter({  //這里要好好說一下,一定要設置html5模式,不然前后端URL不統一會發生問題  //比如訪問 http://localhost:3000/ 服務端定義是訪問index.ts這個路由文件  //如果不是html5模式的話,經過客戶端js運行之后會變成http://localhost:3000/#!/    //在比如直接瀏覽器輸入 http://localhost:3000/foo 服務端定義是訪問.ts這個路由文件  //如果不是html5模式的話,經過客戶端js運行之后會變成 http://localhost:3000/foo/#!/    //設置了html5模式后,加載完js后不會加上#!這2個類似錨點的字符,實現前后端路由統一如果用戶刷新瀏覽器的話,服務端也能渲染出相應的頁面。  history: true, //html5模式 去掉錨點   saveScrollPosition: true //記住頁面的滾動位置 html5模式適用})//定義路由,要和服務端路由路徑定義的一樣router.map({  '/'  : {    component: Index //前端路由定義,  },  '/foo': {    component: Foo  },  '/bar': {    component: Bar  }})//啟動APProuter.start(App, '#app')

需要完善的地方

前后端統一模板,已經找到方法了把html分離出來,node端用fs.readFileSync方法獲取,客戶端用webpack的raw-loader獲取html內容

不放源碼都是瞎扯。

源碼地址

https://github.com/yjj5855/node-vue-server-webpack

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久91亚洲精品中文字幕奶水| 91麻豆国产语对白在线观看| 精品亚洲夜色av98在线观看| 91高清免费视频| 欧美精品在线观看| 亚洲最大成人在线| 日韩中文字幕精品| 欧美日在线观看| 国产一区二区日韩| 中文精品99久久国产香蕉| 久久久久久久久久久成人| 国产一区二区黑人欧美xxxx| 欧美最近摘花xxxx摘花| 久久精品国产电影| 国产精品免费久久久久久| 久久久久久亚洲精品| 国内精品久久久久影院 日本资源| 精品成人久久av| 成人激情视频网| 午夜精品久久久久久久99黑人| 亚洲国产精品久久久久久| 久久网福利资源网站| 欧美激情va永久在线播放| 亚洲欧美日韩国产中文专区| 97视频在线看| 欧美韩国理论所午夜片917电影| 91精品视频免费观看| 国产精品情侣自拍| 国产成人激情小视频| 成人黄色av播放免费| 国产精品久在线观看| 热99精品里视频精品| 成人性生交大片免费看视频直播| 91免费人成网站在线观看18| 久久久久久国产精品美女| 国产亚洲精品综合一区91| www.xxxx欧美| 欧美日韩美女在线观看| www.亚洲一区| 亚洲一级免费视频| 国产精品一区二区性色av| 大桥未久av一区二区三区| 国产精品国产福利国产秒拍| 91色琪琪电影亚洲精品久久| 亚洲欧美制服第一页| 久久天天躁狠狠躁夜夜爽蜜月| 欧美香蕉大胸在线视频观看| 国产69久久精品成人看| 国产精品视频午夜| 色婷婷综合成人av| 亚洲一区二区久久久久久| 国产极品jizzhd欧美| 亚洲男人天堂九九视频| 久久精品小视频| 欧美床上激情在线观看| 都市激情亚洲色图| 91精品久久久久久久久久久久久久| 国产精品无码专区在线观看| 欧美激情高清视频| 久色乳综合思思在线视频| 欧美影院成年免费版| 欧美裸体男粗大视频在线观看| 免费不卡欧美自拍视频| 久久伊人免费视频| 日韩精品一区二区三区第95| 国产日韩在线免费| 2018中文字幕一区二区三区| 宅男66日本亚洲欧美视频| 亚洲天天在线日亚洲洲精| 日本久久久久久久| 国产成人精品免高潮费视频| 久久综合久久美利坚合众国| 亚洲欧美在线播放| 国产亚洲精品综合一区91| 亚洲欧洲一区二区三区久久| 国产精品亚洲精品| 久久综合伊人77777蜜臀| 日韩高清电影好看的电视剧电影| 国产成人欧美在线观看| 欧美精品在线网站| 精品成人在线视频| 日韩成人久久久| 久久免费视频在线观看| 一区二区三区回区在观看免费视频| 国产精品亚洲一区二区三区| 国产偷亚洲偷欧美偷精品| 岛国av午夜精品| 午夜精品一区二区三区在线播放| 国产精品最新在线观看| 国产精品对白刺激| 91精品久久久久久久久不口人| 国产精品美女午夜av| 日韩成人激情影院| 欧美日韩aaaa| 色综合久久88| 欧美日本高清视频| 国产日韩精品视频| 国语自产偷拍精品视频偷| 欧美一级片在线播放| 亚洲美女激情视频| 91在线视频成人| 亚洲第一偷拍网| 亚洲日本aⅴ片在线观看香蕉| 欧美精品少妇videofree| 色偷偷偷亚洲综合网另类| 亚洲精品电影网在线观看| 国产精品xxxxx| 欧美精品九九久久| 欧美日韩美女视频| 国产日韩欧美91| 日韩中文视频免费在线观看| 成人免费黄色网| 国外日韩电影在线观看| 亚洲激情视频在线播放| 亚洲伊人一本大道中文字幕| 成人做爰www免费看视频网站| 国产亚洲欧洲黄色| 日韩有码在线播放| 日韩成人在线观看| 美女性感视频久久久| 国产成人精品一区| 精品露脸国产偷人在视频| 久久精品视频一| 国产精品444| 欧美精品电影在线| 亚洲香蕉av在线一区二区三区| 国产精品免费视频xxxx| 91精品视频在线看| 久久青草精品视频免费观看| 精品中文视频在线| 日韩成人在线视频网站| 久久久av网站| 福利二区91精品bt7086| 欧美视频中文在线看| www.欧美精品| 91成人天堂久久成人| 亚洲人成毛片在线播放| 久久综合88中文色鬼| 91亚洲国产精品| 久久av资源网站| 亚洲欧洲中文天堂| 国产欧美婷婷中文| 日韩一区二区福利| 亚洲精品suv精品一区二区| 精品久久久91| 色综合天天综合网国产成人网| 97视频免费观看| 国产视频自拍一区| 亚洲最大福利视频| 亚洲午夜久久久久久久| 成人午夜两性视频| 91久久久久久久久久久久久| 色多多国产成人永久免费网站| 欧美制服第一页| 亚洲午夜精品久久久久久久久久久久| 亚洲a级在线播放观看| 日韩欧美黄色动漫| 中文字幕久久久av一区| 国产啪精品视频网站| 亚洲乱码一区二区| 欧美成人合集magnet| 国产精品日韩精品| 色偷偷av一区二区三区| 91精品国产综合久久香蕉|