|
|
@@ -1,21 +1,13 @@
|
|
|
-const chokidar = require('chokidar')
|
|
|
-const bodyParser = require('body-parser')
|
|
|
-const chalk = require('chalk')
|
|
|
+const fs = require('fs')
|
|
|
const path = require('path')
|
|
|
+const chalk = require('chalk')
|
|
|
+const chokidar = require('chokidar')
|
|
|
+const express = require('express')
|
|
|
const Mock = require('mockjs')
|
|
|
-const router = require('express').Router()
|
|
|
+const router = express.Router()
|
|
|
|
|
|
const mockDir = path.join(process.cwd(), 'mock')
|
|
|
|
|
|
-function unregisterRoutes () {
|
|
|
- Object.keys(require.cache).forEach(i => {
|
|
|
- if (i.includes(mockDir)) {
|
|
|
- delete require.cache[require.resolve(i)]
|
|
|
- }
|
|
|
- })
|
|
|
-}
|
|
|
-
|
|
|
-// for mock server
|
|
|
function responseFake(url, type, respond) {
|
|
|
return {
|
|
|
url: new RegExp(`${url}`),
|
|
|
@@ -28,23 +20,43 @@ function responseFake(url, type, respond) {
|
|
|
}
|
|
|
|
|
|
function register (router) {
|
|
|
- const proxyCount = require('./proxy').register(router)
|
|
|
+ require('./proxy').register(router)
|
|
|
|
|
|
- const { mocks } = require('./index.js')
|
|
|
- const mocksForServer = mocks.map(route => {
|
|
|
- return responseFake(route.url, route.type, route.response)
|
|
|
- })
|
|
|
- for (const mock of mocksForServer) {
|
|
|
- router[mock.type](mock.url, mock.response)
|
|
|
+ router.use(express.json())
|
|
|
+ router.use(express.urlencoded({
|
|
|
+ extended: true
|
|
|
+ }))
|
|
|
+
|
|
|
+ const routes = []
|
|
|
+ try {
|
|
|
+ fs.readdirSync(path.join(__dirname, 'routes')).forEach(file => {
|
|
|
+ const mocks = require(`./routes/${file}`)
|
|
|
+ if (Array.isArray(mocks)) {
|
|
|
+ routes.push(...mocks)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ } catch (e) {
|
|
|
+ console.log('no mock routes', e)
|
|
|
}
|
|
|
+ routes.forEach(route => {
|
|
|
+ const { type, url, response } = responseFake(route.url, route.type, route.response)
|
|
|
+ router[type](url, response)
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+function unregister () {
|
|
|
+ router.stack = []
|
|
|
+
|
|
|
+ // clear routes cache
|
|
|
+ Object.keys(require.cache).forEach(i => {
|
|
|
+ if (i.includes(mockDir)) {
|
|
|
+ delete require.cache[require.resolve(i)]
|
|
|
+ }
|
|
|
+ })
|
|
|
}
|
|
|
|
|
|
module.exports = app => {
|
|
|
app.use(process.env.VUE_APP_BASE_API, router)
|
|
|
- app.use(bodyParser.json())
|
|
|
- app.use(bodyParser.urlencoded({
|
|
|
- extended: true
|
|
|
- }))
|
|
|
register(router)
|
|
|
|
|
|
// watch files, hot reload mock server
|
|
|
@@ -54,13 +66,8 @@ module.exports = app => {
|
|
|
}).on('all', (event, path) => {
|
|
|
if (event === 'change' || event === 'add') {
|
|
|
try {
|
|
|
- router.stack = []
|
|
|
-
|
|
|
- // clear routes cache
|
|
|
- unregisterRoutes()
|
|
|
-
|
|
|
+ unregister()
|
|
|
register(router)
|
|
|
-
|
|
|
console.log(chalk.magentaBright(`\n > Mock Server hot reload success! changed ${path}`))
|
|
|
} catch (error) {
|
|
|
console.log(chalk.redBright(error))
|