4 changed files with 2 additions and 4468 deletions
@ -1,26 +0,0 @@ |
|||
// [START functions import]
|
|||
const express = require('express'); |
|||
const serverLess = require('serverless-http'); |
|||
|
|||
const matchMock = require('./mock/matchMock'); |
|||
|
|||
const app = express(); |
|||
|
|||
app.all('*', (req, res, next) => { |
|||
res.header('Access-Control-Allow-Origin', '*'); |
|||
res.header( |
|||
'Access-Control-Allow-Headers', |
|||
'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild', |
|||
); |
|||
res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS'); |
|||
|
|||
if (req.method == 'OPTIONS') { |
|||
res.send(200); |
|||
} else { |
|||
next(); |
|||
} |
|||
}); |
|||
|
|||
app.use(matchMock); |
|||
|
|||
exports.handler = serverLess(app); |
|||
File diff suppressed because it is too large
@ -1,116 +0,0 @@ |
|||
const pathToRegexp = require('path-to-regexp'); |
|||
const bodyParser = require('body-parser'); |
|||
|
|||
const mockFile = require('./index'); |
|||
|
|||
const BODY_PARSED_METHODS = ['post', 'put', 'patch']; |
|||
|
|||
const debug = console.log; |
|||
function parseKey(key) { |
|||
let method = 'get'; |
|||
let path = key; |
|||
if (key.indexOf(' ') > -1) { |
|||
const spliced = key.split(' '); |
|||
method = spliced[0].toLowerCase(); |
|||
path = spliced[1]; // eslint-disable-line
|
|||
} |
|||
const routerBasePath = `${path}`; |
|||
return { |
|||
method, |
|||
path: routerBasePath, |
|||
}; |
|||
} |
|||
|
|||
function createHandler(method, path, handler) { |
|||
return (req, res, next) => { |
|||
function sendData() { |
|||
if (typeof handler === 'function') { |
|||
handler(req, res, next); |
|||
} else { |
|||
res.json(handler); |
|||
} |
|||
} |
|||
if (BODY_PARSED_METHODS.includes(method)) { |
|||
bodyParser.json({ limit: '5mb', strict: false })(req, res, () => { |
|||
bodyParser.urlencoded({ limit: '5mb', extended: true })(req, res, () => { |
|||
sendData(); |
|||
}); |
|||
}); |
|||
} else { |
|||
sendData(); |
|||
} |
|||
}; |
|||
} |
|||
|
|||
function normalizeConfig(config) { |
|||
return Object.keys(config).reduce((memo, key) => { |
|||
const handler = config[key]; |
|||
const { method, path } = parseKey(key); |
|||
const keys = []; |
|||
const re = pathToRegexp(path, keys); |
|||
memo.push({ |
|||
method, |
|||
path, |
|||
re, |
|||
keys, |
|||
handler: createHandler(method, path, handler), |
|||
}); |
|||
return memo; |
|||
}, []); |
|||
} |
|||
|
|||
const mockData = normalizeConfig(mockFile); |
|||
|
|||
function matchMock(req) { |
|||
const { path: exceptPath } = req; |
|||
const exceptMethod = req.method.toLowerCase(); |
|||
function decodeParam(val) { |
|||
if (typeof val !== 'string' || val.length === 0) { |
|||
return val; |
|||
} |
|||
|
|||
try { |
|||
return decodeURIComponent(val); |
|||
} catch (err) { |
|||
if (err instanceof URIError) { |
|||
err.message = `Failed to decode param ' ${val} '`; |
|||
err.statusCode = 400; |
|||
err.status = 400; |
|||
} |
|||
|
|||
throw err; |
|||
} |
|||
} |
|||
// eslint-disable-next-line no-restricted-syntax
|
|||
for (const mock of mockData) { |
|||
const { method, re, keys } = mock; |
|||
if (method === exceptMethod) { |
|||
const match = re.exec(req.path); |
|||
if (match) { |
|||
const params = {}; |
|||
|
|||
for (let i = 1; i < match.length; i += 1) { |
|||
const key = keys[i - 1]; |
|||
const prop = key.name; |
|||
const val = decodeParam(match[i]); |
|||
|
|||
if (val !== undefined || !hasOwnProperty.call(params, prop)) { |
|||
params[prop] = val; |
|||
} |
|||
} |
|||
req.params = params; |
|||
return mock; |
|||
} |
|||
} |
|||
} |
|||
|
|||
return mockData.filter(({ method, re }) => method === exceptMethod && re.test(exceptPath))[0]; |
|||
} |
|||
module.exports = (req, res, next) => { |
|||
const match = matchMock(req); |
|||
if (match) { |
|||
debug(`mock matched: [${match.method}] ${match.path}`); |
|||
return match.handler(req, res, next); |
|||
} |
|||
return next(); |
|||
}; |
|||
Loading…
Reference in new issue