一. 什么是前后端联调
1.在我们开发的过程中,发送请求的ajax数据都不是后端返回的真数据,而是我们自己通过接口mock模拟的假数据,当前端的代码编写完成后,后端的接口也写好后,我们就需要把mock数据换点,尝试使用后端提供的数据,进行一个前后端的调试,我们会把这个过程叫做前后端接口联调。
2.前后端联调是一种真实业务数据和本地mock数据之间来回切换以达到前后端分离架构下的不同开发速度时数据交换的一种方式方法
二.环境的搭建
vue+vuex下载
二.2 koa环境的搭建
// 全局安装脚手架工具
npm i vue-vli -g
// 验证脚手架工具安装成功与否
vue --version
// 构建项目
vue init webpack 项目名
// 测试vue项目是否运行成功
npm run dev
// 安装vuex
npm i vuex --save
前端项目构建好了,就开始构建我们的后端服务。
首先在你的开发工具里新建一个目录,用来搭建基于koa的web服务。
在这里,我们不妨给这个目录起名为koa-demo。
// 进入目录
cd koa-demo
// 生成package.json
npm init -y
// 安装以下依赖项
npm i koa
npm i koa-router
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/data.json'路径,该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": "上海 中山大学",
}]
组件有两部分:首先是一个按钮,用来调用web服务的getJson接口;然后是一个内容展示区域,拿到后端返回的数据以后,将其在组件的这块区域显示出来。
<template>
<div class="test">
<button type="button" @click="getJson">从后端取json</button>
<div class="showJson">{{json}}</div>
</div>
</template>
<script>
import {store} from '../vuex'
export default {
setup(){
getJson()=>{
store.dispatch("getJson")
}
},
return{
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',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
},
}).then(function (res) {
if(res.status === 200){
return res.json()
}
}).then(function (json) {
context.commit('setJson', Array.from(json));
})
}
};
export const store = new Vuex.Store({
state: state,
mutations: mutations,
actions: actions,
})
复制代码