【Vue】5.vue mock数据(模拟后台)
来源:互联网 发布:php淘宝短网址还原 编辑:程序博客网 时间:2024/05/22 10:24
vue实现ajax获取后台数据是通过vue-resource,首先通过npm安装vue-resource
npm install vue-resource --save安装完成以后,把vue-resource引入到main.js文件中
src/main.js
// The Vue build version to load with the `import` command// (runtime-only or standalone) has been set in webpack.base.conf with an alias.import Vue from 'vue'import App from './App'import router from './router'import VueResource from 'vue-resource'import Layout from './components/layout'Vue.use(VueResource);/* eslint-disable no-new */new Vue({ el: '#app', router, template: '<Layout/>', components: { Layout }})把vue-resource引入项目以后,就可以在任何组件里面直接用了
<template> <div class="index-wrap"> <div class="index-left"> <div class="index-left-block lastest-news"> <h2>最新消息</h2> <ul> <li v-for="news in newsList"> <a :href="news.url" class="new-item">{{news.title}}</a> </li> </ul> </div> </div> <div class="index-right"> </div> </div></template><script type="text/ecmascript-6"> export default{ created(){ this.$http.get('api/getNewsList').then((res)=>{ //可用post请求,this.$http.post('api/getNewsList',{'userId':123}) console.log(res.data); this.newsList=res.data; console.log( this.newsList); },(err)=>{ console.log(err); }); }, data(){ return { newsList:[], } } }</script><style scoped> .index-wrap{ width: 1200px; margin: 0 auto; overflow: hidden; background: blue; } .index-left{ float: left; width: 300px; text-align: left; background: red; } .index-right { float: left; width: 900px; } .index-left-block{ margin: 15px; background: #fff; box-shadow: 0 0 1px #ddd; } .index-left-block .hr { margin-bottom: 20px; border-bottom: 1px solid #ddd; } .index-left-block h2 { background: #4fc08d; color: #fff; padding: 10px 15px; margin-bottom: 20px; } .index-left-block h3 { padding: 0 15px 5px 15px; font-weight: bold; color: #222; } .index-left-block ul { padding: 10px 15px; } .index-left-block li { padding: 5px; } .hot-tag{ background: red; color:#fff; font-size: 10px; border-radius: 10px; } </style>上面这个就是用vue-resource来进行数据请求的大体流程,作为前端,在开发的过程,遇到这种调用后端接口调试起来还是很麻烦的,我们要找后端的一个服务器,然后关联起来 ,或者把前端代码放上去,这样都是挺麻烦的,解决的办法就是前端放mock data,主要有两种方式:
(1)json-server模拟数据
使用json-server这个工具,可以虚构出后端接口对应的数据,然后在项目里发送特定的请求,就可以发请求拿到模拟的数据,首先npm安装
npm install json-server --save然后在build/webpack.dev.conf.js中进行配置,参考json-server
'use strict'const utils = require('./utils')const webpack = require('webpack')const config = require('../config')const merge = require('webpack-merge')const baseWebpackConfig = require('./webpack.base.conf')const HtmlWebpackPlugin = require('html-webpack-plugin')const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')const portfinder = require('portfinder')const devWebpackConfig = merge(baseWebpackConfig, { module: { rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true }) }, // cheap-module-eval-source-map is faster for development devtool: config.dev.devtool, // these devServer options should be customized in /config/index.js devServer: { clientLogLevel: 'warning', historyApiFallback: true, hot: true, host: process.env.HOST || config.dev.host, port: process.env.PORT || config.dev.port, open: config.dev.autoOpenBrowser, overlay: config.dev.errorOverlay ? { warnings: false, errors: true, } : false, publicPath: config.dev.assetsPublicPath, proxy: config.dev.proxyTable, quiet: true, // necessary for FriendlyErrorsPlugin watchOptions: { poll: config.dev.poll, } }, plugins: [ new webpack.DefinePlugin({ 'process.env': require('../config/dev.env') }), new webpack.HotModuleReplacementPlugin(), new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update. new webpack.NoEmitOnErrorsPlugin(), // https://github.com/ampedandwired/html-webpack-plugin new HtmlWebpackPlugin({ filename: 'index.html', template: 'index.html', inject: true }), ]})//这里是json-server配置信息// json-server.jsconst jsonServer = require('json-server')const apiServer = jsonServer.create()const apiRouter = jsonServer.router('db.json') //数据关联server,db.json与index.html同级const middlewares = jsonServer.defaults()apiServer.use(middlewares)apiServer.use('/api',apiRouter)apiServer.listen(3000, () => { //监听端口 console.log('JSON Server is running')})module.exports = new Promise((resolve, reject) => { portfinder.basePort = process.env.PORT || config.dev.port portfinder.getPort((err, port) => { if (err) { reject(err) } else { // publish the new Port, necessary for e2e tests process.env.PORT = port // add port to devServer config devWebpackConfig.devServer.port = port // Add FriendlyErrorsPlugin devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({ compilationSuccessInfo: { messages: [`Your application is running here: http://${config.dev.host}:${port}`], }, onErrors: config.dev.notifyOnErrors ? utils.createNotifierCallback() : undefined })) resolve(devWebpackConfig) } })})配置完成以后,npm run dev 启动,浏览器输入localhost:3000,出现如下图,说明配置成功
那么现在还有一个问题,我们代码的服务端接口是8080,json-server的服务端端口是3000,由于浏览器的同源策略问题,这样请求会存在一个跨域问题,所以这里要做一个服务端代理的配置,配置build/index.js中的proxyTable:
host: 'localhost', // can be overwritten by process.env.HOST port: 8080, // can be overwritten by process.env.HOST, if port is in use, a free one will be determined autoOpenBrowser: false, errorOverlay: true, notifyOnErrors: true, poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions- proxyTable:{ '/api/':'http://localhost:3000/' },这样就可以在localhost:8080下访问接口了
(2)express启动数据服务
在实际开发中,发现json-server只能用于get请求,不能进行post请求,在网上找的另外一种方法,express既能用于get请求,又能用于post请求,下面说一下express启动服务的配置方法:
'use strict'const utils = require('./utils')const webpack = require('webpack')var express = require('express')const config = require('../config')const merge = require('webpack-merge')const baseWebpackConfig = require('./webpack.base.conf')const HtmlWebpackPlugin = require('html-webpack-plugin')const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')const portfinder = require('portfinder')const devWebpackConfig = merge(baseWebpackConfig, { module: { rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true }) }, // cheap-module-eval-source-map is faster for development devtool: config.dev.devtool, // these devServer options should be customized in /config/index.js devServer: { clientLogLevel: 'warning', historyApiFallback: true, hot: true, host: process.env.HOST || config.dev.host, port: process.env.PORT || config.dev.port, open: config.dev.autoOpenBrowser, overlay: config.dev.errorOverlay ? { warnings: false, errors: true, } : false, publicPath: config.dev.assetsPublicPath, proxy: config.dev.proxyTable, quiet: true, // necessary for FriendlyErrorsPlugin watchOptions: { poll: config.dev.poll, } }, plugins: [ new webpack.DefinePlugin({ 'process.env': require('../config/dev.env') }), new webpack.HotModuleReplacementPlugin(), new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update. new webpack.NoEmitOnErrorsPlugin(), // https://github.com/ampedandwired/html-webpack-plugin new HtmlWebpackPlugin({ filename: 'index.html', template: 'index.html', inject: true }), ]})// json-server.js//const jsonServer = require('json-server')//const apiServer = jsonServer.create()//const apiRouter = jsonServer.router('db.json')//const middlewares = jsonServer.defaults()////apiServer.use(middlewares)//apiServer.use('/api',apiRouter)//apiServer.listen(3000, () => {// console.log('JSON Server is running')//})//express 配置servervar apiServer = express()var bodyParser = require('body-parser')apiServer.use(bodyParser.urlencoded({ extended: true }))apiServer.use(bodyParser.json())var apiRouter = express.Router()var fs = require('fs')apiRouter.route('/:apiName') //接口路径 .all(function (req, res) { fs.readFile('./db.json', 'utf8', function (err, data) { //读取接口文件 if (err) throw err var data = JSON.parse(data) if (data[req.params.apiName]) { res.json(data[req.params.apiName]) } else { res.send('no such api name') } }) })apiServer.use('/api', apiRouter);apiServer.listen(3000, function (err) { if (err) { console.log(err) return } console.log('Listening at http://localhost:' + 3000 + '\n')})module.exports = new Promise((resolve, reject) => { portfinder.basePort = process.env.PORT || config.dev.port portfinder.getPort((err, port) => { if (err) { reject(err) } else { // publish the new Port, necessary for e2e tests process.env.PORT = port // add port to devServer config devWebpackConfig.devServer.port = port // Add FriendlyErrorsPlugin devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({ compilationSuccessInfo: { messages: [`Your application is running here: http://${config.dev.host}:${port}`], }, onErrors: config.dev.notifyOnErrors ? utils.createNotifierCallback() : undefined })) resolve(devWebpackConfig) } })})在浏览器中输入接口地址,如下:
阅读全文
0 0
- 【Vue】5.vue mock数据(模拟后台)
- vue mock json 数据(模拟后台数据)
- vue项目模拟后台数据
- vue Mock数据
- vue mock数据
- vue 饿了么模拟后台数据
- vue之mock.js模拟接口
- vue 请求后台数据
- vue饿了么学习-第六篇(mock数据)
- javaScript mock模拟后台数据
- vue实现app问题总结(一)vue-cli本地开发数据Mock
- vue-cli项目中怎么mock数据
- Vue mock & vue-resource & JSONP
- Vue之vue-resource入门--模拟数据
- Vue.js 请求后台数据
- 搭建vue+webpack+mock脚手架(一)
- vue mock小记
- 模拟Vue之数据驱动
- T-MVP开发模式
- 【浅度渣文】JVM——G1收集器
- Spring Data Jpa 和 Hiberate 的Criteria API的区别
- RocketMQ消息类型
- Ubuntu16.04下编译OpenCV3.0.0
- 【Vue】5.vue mock数据(模拟后台)
- linux安装JDK,Maven,intellij IDEA
- <context:include-filter>和<context:exclude-filter>
- java 网页授权获取微信用户信息错误 40029 微信端会发出两次请求 错误的oauth第二次无效的code
- Android-框架-The Clean Architecture
- hibernate插入数据到mysql数据库中乱码问题
- 判断网络的工具类
- JAVA课程学习十:继承训练
- 如何在 Azure 中均衡 Linux 虚拟机负载以创建高可用性应用程序