本篇文章主要介紹了詳解vue vuex koa2開發環境建置及範例開發,現在分享給大家,也給大家做個參考。
寫在前面
這篇文章的主要目的是學會使用koa框架來搭建web服務,從而提供一些後端接口,供前端調用。
搭建這個環境的目的是: 前端工程師在跟後台工程師商定了介面但還未聯調之前,涉及到向後端請求資料的功能能夠走前端工程師自己搭建的http路徑,而不是直接在前端寫幾個死數據。即,模擬後端介面。
當然在這整個過程(搭建環境 開發範例demo)中,涉及以下幾點知識點。
包含:
koa2的知識點
#node的知識點
跨域問題
fetch的使用
axios的使用
promise的涉及
vuex -> state、mutations、actions的使用
##第一部分:環境建構
vue vuex環境
首先是vue vue-router vuex的環境。我們用vue-cli腳手架產生項目,會用vue的同學對這塊應該很熟了。// 全局安装脚手架工具 npm i vue-vli -g // 验证脚手架工具安装成功与否 vue --version // 构建项目 vue init webpack 项目名 // 测试vue项目是否运行成功 npm run dev因為腳手架產生的vue專案不包含vuex,所以再安裝vuex。
// 安装vuex npm i vuex --save
koa2環境
前端專案建置好了,就開始建立我們的後端服務。 首先在你的開發工具(不管是webstorm還是sublime)裡新建一個目錄,用來建立基於koa的web服務。 在這裡,我們不妨給這個目錄取名為koa-demo。 然後執行:// 进入目录 cd koa-demo // 生成package.json npm init -y // 安装以下依赖项 npm i koa npm i koa-router npm i koa-cors安裝好koa和兩個中間件,環境就算搭建完成了。
第二部分:範例開發
建置環境是為了使用,所以我們立刻寫一個demo出來。 demo開發既是練習如何在開發環境中寫程式碼的過程,反過來,也是一個驗證環境建構的對不對、好不好用的過程。後端介面開發
本例中,後端我們只提供一個服務,就是提供前端一個回傳json資料的介面。程式碼中包含註釋,所以直接上程式碼。 server.js文件// server.js文件 let Koa = require('koa'); let Router = require('koa-router'); let cors = require('koa-cors'); // 引入modejs的文件系统API let fs = require('fs'); const app = new Koa(); const router = new Router(); // 提供一个/getJson接口 router .get('/getJson', async ctx => { // 后端允许cors跨域请求 await cors(); // 返回给前端的数据 ctx.body = JSON.parse(fs.readFileSync( './static/material.json')); }); // 将koa和两个中间件连起来 app.use(router.routes()).use(router.allowedMethods()); // 监听3000端口 app.listen(3000);這裡面用到了一個json文件,在'./static/material.json'路徑,該json文件的程式碼是:
// material.json文件 [{ "id": 1, "date": "2016-05-02", "name": "张三", "address": "北京 清华大学", }, { "id": 2, "date": "2016-05-04", "name": "李四", "address": "上海 复旦大学", }, { "id": 3, "date": "2016-05-01", "name": "王五", "address": "广东 中山大学", }, { "id": 4, "date": "2016-05-03", "name": "赵六", "address": "广东 深圳大学", }, { "id": 5, "date": "2016-05-05", "name": "韩梅梅", "address": "四川 四川大学", }, { "id": 6, "date": "2016-05-11", "name": "刘小律", "address": "湖南 中南大学", }, { "id": 7, "date": "2016-04-13", "name": "曾坦", "address": "江苏 南京大学", }]然後我們是用以下指令將服務啟動
node server.js
測試介面是否良好
#開啟瀏覽器,輸入http://127.0.0.1:3000/getJson。看看頁面上是否將json檔案中的json資料顯示出來,如果能夠顯示出來,則說明這個提供json資料的服務,我們已經搭建好了。前端呼叫後端介面範例
為突出重點,排除乾擾,方便理解。我們的前端就寫一個元件,元件有兩個部分:首先是一個按鈕,用來呼叫web服務的getJson介面;然後是一個內容展示區域,拿到後端回傳的資料以後,將其在元件的這塊區域顯示出來。 首先我們來看元件檔吧<template> <p class="test"> <button type="button" @click="getJson">从后端取json</button> <p class="showJson">{{json}}</p> </p> </template> <script> import {store} from '../vuex' export default { computed: { json(){ return store.state.json; } }, methods: { getJson(){ store.dispatch("getJson"); } } } </script> <style scoped> .showJson{ width:500px; margin:10px auto; min-height:500px; background-color: palegreen; } </style>很簡單,就不多解釋了。 然後看我們的vuex檔。
import Vue from 'vue' import Vuex from 'vuex'; Vue.use(Vuex) const state = { json: [], }; const mutations = { setJson(state, db){ state.json = db; } } const actions = { getJson(context){ // 调用我们的后端getJson接口 fetch('http://127.0.0.1:3000/json', { method: 'GET', // mode:'cors', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json', }, }).then(function (res) { if(res.status === 200){ return res.json() } }).then(function (json) { //console.log(typeof Array.from(json), Array.from(json)); context.commit('setJson', Array.from(json)); }) } }; export const store = new Vuex.Store({ state: state, mutations: mutations, actions: actions, })ok, 程式碼擼完了。
說說axios
想要把本demo的fetch改為axios方式,要做的工作有以下幾個:1、安裝axios、在vuex檔引用axiosnpm i axios import axios from 'axios'2、將fetch部分程式碼替換為:
const actions = { getJson(context){ axios.get('/json', { method: 'GET', // mode:'cors', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json', }, }).then(function (res) { if(res.status === 200){ return res.data } }).then(function (json) { //console.log(typeof Array.from(json), Array.from(json)); context.commit('setJson', Array.from(json)); }) } };3、又會遇到跨網域,在webpack中修改,路徑config/index. js檔案中新增proxyTable項的設定:
proxyTable: { '/json': { target: 'http://127.0.0.1:3000', changeOrigin: true, pathRewrite: { '^/json': '/json' } } },
#後記
基於vue鷹架搭建的項目,模擬非同步取數據,也可以直接在鷹架產生的static文件夾下放置數據,假裝是後台拿過來的數據。 不過搭建一個基於express或koa的web服務,確實也該是一個前端工程師應該掌握的。 上面是我整理給大家的,希望今後對大家有幫助。 相關文章:以上是使用vue+vuex+koa2如何建構開發環境的詳細內容。更多資訊請關注PHP中文網其他相關文章!