三:本地Mock周边知识
本地Mock的思想就是利用Node + express完成Restful Api。结合webpack配置项devServer同时利用Vue-cli3.0的暴露的配置利用本地express完成mock接口的添加
1、Node+Express的相关知识点,用node+express写过Restful Api的就应该知道接下来Mock怎么处理了,这里我先简要介绍一下我们需要用到的技术吧(Express的路由以及node的fs模块)
Express路由相关,具体的见文档,这里不区分请求方法,直接app.use
const express = require('express');
const app = express();// 这样一个简单的路由就完成了,请求到/ajax-get-info的请求就能拿到对应的JSON数据
app.use('/ajax-get-info', (req, res) => {
res.send({
"success": true,
"code": 0,
"data": {}
})
});
针对不同的请求生成动态的内容,我们可以通过req.query和req.params等来生成动态内容,在express中,我们传入的body内容,在req.body中并获取不到,需要添加中间件body-parser,需要注意的是这个中间件不能在app全局路由使用,不然会影响到代码到测服的接口,利用http-proxy-middleware转发的接口,所以我们需要单独的设置一个Mock路由,针对路由级别的使用中间件,代码如下
const bodyParser = require('body-parser');
const express = require('express');const mockRouter = express.Router();
// express middleware bodyParser for mock server
// for parsing application/json
mockRouter.use(bodyParser.json());
// for parsing application/x-www-form-urlencoded
mockRouter.use(bodyParser.urlencoded({ extended: true }));
// Api prefix named /mock
app.use('/mock', mockRouter);
// now you can set mock api use mockRouter
mockRouter.use('/ajax-get-info', (req, res) => {
// use req.body to get request body info
console.log(req.body);
res.send({
"success": true,
"code": 0,
"data": {
// return dynamic JSON
name: req.body.name
}
})
});
现在Mock级别的路由已经有了,接下来我们就要准备对应的路由和响应的callback了,添加一个mock文件夹,专门放置一些mock接口的文件,利用node的fs模块引入所有需要mock的接口即可
const path = require('path');
const mockDir = path.resolve(__dirname, '../mock');fs.readdirSync(mockDir).forEach(file => {
const mock = require(path.resolve(mockDir, file));
// mockRouter就是上面Mock路由即可
mockRouter.use(mock.api, mock.response);
});
2、Vue-cli3.x的基本知识,相对比于Vue-cli2.x的版本,把webpack的配置封装出来,抛出一些外在接口去修改webpack配置,我们需要了解的是针对开发模式express的使用(内部使用webpack-dev-serve),Vue-cli3.0需要的是在适当的时机处理开发模式的express实例,来达到Mock的目的










