$ vue init nuxt-community/koa-template <project-name> $ cd <project-name> $ npm run dev
<!-- 1. 若是有報錯: Plugin/Preset files are not allowed to export objects, only functions 須要下降nuxt版本至1.4.2: npm uninstall nuxt npm install nuxt@1.4.2 2. 升級eslint-plugin-html $ npm i eslint-plugin-html@^3 -->
在server文件夾中定義koa2的路由信息,而且在server/index中掛載註冊路由信息;
在layouts文件夾中定義模板文件;在pages文件夾下編輯前端頁面;
二、使用layout模板
例如在layouts文件夾中設置search模板
<template> <div> <nuxt/> <my-footer/> </div> </template> <script> import MyFooter from '../components/Footer.vue' export default { components: { MyFooter } } </script>
這裏注意 <nuxt>至關於 vue-router 中的 html
<!-- 對應的組件內容渲染到router-view中 --> <router-view></router-view>
而後在 page 文件中 引入該模板:前端
<script> export default { layout:'search', } </script>
定義接口在koa-router,獲取接口數據在page vue中:vue
在server/interface/city 文件下,設置接口信息ios
const router = require('koa-router')() router.prefix('/city') router.get('/list', (ctx) => { ctx.body = { list:['北京','天津'] } }) module.exports = router
而後在server/index.js文件下掛載註冊:vue-router
const city = require('./interface/city')
app.use(city.routes(), city.allowedMethods())
以上爲服務器端接口設置,接下來是前端頁面請求數據:vuex
<template> <div> <ul> <li v-for="(item,idx) in cities" :key="idx"> {{item}} </li> </ul> </div> </template> <script> import axios from 'axios' export default { layout:'search', data(){ return { cities:[] } }, // async mounted() { //該方法是前端渲染頁面 // let cities; // let {status,data} = await axios.get('/city/list'); // console.log(data.list); //在瀏覽器端出現 // if(status == 200){ // this.cities = data.list // } // }, async asyncData() { //再render以前 獲取異步數據 是服務器端渲染頁面 let cities; let {status,data} = await axios.get('http://localhost:3000/city/list');//因爲是服務端渲染,需寫全路徑 console.log(data.list);//在服務器端出現 if(status == 200){ return { cities:data.list //return返回data同名數據 } } } } </script> <style scoped> </style>
4. 引入vuex 框架npm
注意引入vuex 使用普通方式的狀態樹,須要添加 store/index.js
文件,並對外暴露一個 Vuex.Store 實例:axios
import Vue from 'vue'; import Vuex from 'vuex'; import citys from './modules/city' import navbars from './modules/navbar' Vue.use(Vuex)//安裝註冊vuex const store = () => new Vuex.Store({//實例話vuex,並引入兩個vuex定義的函數 modules:{ citys, } }) export default store
如上所示,須要實例化 vuex再拋出,和以前直接拋出 vuex的不同。瀏覽器
5 見文章 Nuxt開發經驗分享,讓你踩少點坑服務器