本項目是東北大學計算機學院網站的一個非官方版本.涉及了前端/後端/數據庫/備案/https/域名/服務器等內容javascript
# install dependencies npm install # serve with hot reload at localhost:8080 npm run dev # build for production with minification npm run build # build for production and view the bundle analyzer report npm run build --report # run unit tests npm run unit # run e2e tests npm run e2e # run all tests npm test
vue.js
css
vue-router
前端
axios
vue
element-ui
java
express
node
前端頁面採用vue
框架實現,後端採用基於node.js
的後端框架express
.ios
採用前端分離的方式,利用axios
發送向後端發送ajax請求,後端在收到請求後返回json
,實現了交互過程.ajax
例如: 前端界面要向獲取新聞,須要向後端發送一個請求,利用axios
發送vue-router
this.$axios({ method: 'get', //請求方法 url: 'http://118.89.173.108:3000/api/ImNews', //請求url timeout: '3000'}) //設置超時時間爲3000ms .then(response => { console.log(response.data) this.topNews = response.data }) .catch(error => { //發送失敗 console.log(error) })
後端收到請求,查詢數據庫,以json的形式返回結果數據庫
app.get('/api/latestNews', function (req, res,next) { pool.getConnection(function(err, connection) { var resResult=[] connection.query('select * from ImageNews',function(err,result1){ if(result1){ resResult=result1 } }) connection.query('select * from News',function(err,result2){ if(result2){ //console.log(resResult) resResult.push(result2) responseJSON(res,resResult) connection.release() } }) }) });
返回結果:
前端渲染:
<div id="centerList" class="column"> <div class="list" v-for="item in centerNews"><a href="#" target="_blank">{{item.Title}}</a></div> </div>
得益於vue-router
的強大,咱們能夠經過它實現強大的路由功能.
因爲項目含有較多組件,若是在頁面首次打開時就須要加載全部組件,無疑無大大減緩加載速度,爲此,引入vue-router
的lazy-load
功能, 因爲在首頁加載完成後不須要加載校友組件,因此下面以校友頁面爲例,說明該過程
export default new Router({ routes: [ { path: '/Alumnus', component: resolve => require(['@/components/Identity/Alumnus.vue'], resolve) } ] })
父路由下還有子路由,路由之間存在嵌套,定義子路由以下:
{
path: '/', name: 'Index', component: Index, redirect: '/AcademyProfile/index', children: [{ path: '/AcademyProfile/:page', name: AcademyProfile, component: AcademyProfile }] }
更改網站打開的默認路由
redirect: '/AcademyProfile/index',
{
path: '/News/:page', component: resolve => require(['@/components/Tree/News.vue'], resolve) }
經過$route.params
傳遞參數,來匹配不一樣的路由,而後經過watch來檢測變化.
這裏我使用的UI組件庫是有餓了麼出品的element-ui
,須要在main.js
引入組件和樣式表
import elementUI from 'element-ui' import 'element-ui/lib/theme-default/index.css' Vue.use(elementUI)
應用主要是左側的樹型結構和新聞頁的輪播效果.
因爲存在登陸,爲了更加安全,引入了https,在Apache2中引入開啓https的代碼以下:
<VirtualHost *:443> ServerName www.neucse.cn SSLCertificateFile /etc/apache2/ssl/2_www.neucse.cn.crt //ssl爲存放證書的路徑 SSLCertificateKeyFile /etc/apache2/ssl/3_www.neucse.cn.key SSLCertificateChainFile /etc/apache2/ssl/1_root_bundle.crt >
數據庫選用的是MySQL
,用express操縱數據庫.
截止到今天,備案仍然沒有經過,不得不吐槽辦事效率,從騰訊雲開始提交信息再到提交管局,從5月20號到7月5號依舊顯示備案中.