const DB = require('./sample.db.js'); module.exports = function(req, res) { const pathname = (req.originalUrl || req.url).replace(/^\/(api\/mock2|api)\/|\?.*$/g, ''); if (pathname === 'sample' && (req.method === 'POST' || req.method === 'PUT')) { return store(req, res); } else if (/sample\/(\d+(?:,\d+)*)?$/.test(pathname)) { if (req.method === 'POST' || req.method === 'PUT') { return update(req, res, RegExp.$1); } else if (req.method === 'DELETE') { return del(req, res, RegExp.$1); } } else if (pathname === 'sample/bulkUpdate') { return bulkUpdate(req, res); } else if (pathname === 'sample/bulkUpdate2') { return bulkUpdate2(req, res); } return index(req, res); }; function index(req, res) { const perPage = parseInt(req.query.perPage, 10); const page = req.query.page || 1; let items = DB.concat(); if (req.query.keywords) { const keywords = req.query.keywords; items = items.filter(function(item) { return ~JSON.stringify(item).indexOf(keywords); }); } if (req.query.engine) { const keywords = req.query.engine; items = items.filter(function(item) { return ~JSON.stringify(item.engine).indexOf(keywords); }); } if (req.query.orderBy) { const field = req.query.orderBy; const direction = req.query.orderDir === 'desc' ? -1 : 1; items = items.sort(function(a, b) { a = String(a[field]); b = String(b[field]); if (/^\d+$/.test(a) && /^\d+$/.test(b)) { a = parseInt(a, 10); b = parseInt(b, 10); return (a > b ? 1 : a < b ? -1 : 0) * direction; } return a.localeCompare(b) * direction; }); } let response = () => res.json({ status: 0, msg: 'ok', data: { count: items.length, rows: perPage ? items.splice((page - 1) * perPage, perPage) : items.concat() } }); if (req.query.waitSeconds) { return setTimeout(response, parseInt(req.query.waitSeconds, 10) * 1000); } return response(); } function store(req, res) { const data = Object.assign({}, req.body); data.id = DB.length ? DB[DB.length - 1].id + 1 : 1; DB.push(data); return res.json({ status: 0, msg: '新增成功' }); } function update(req, res, id) { const ids = id.split(','); if ( !ids.every(function(id) { const idx = DB.findIndex(function(item) { return item.id == id; }); if (!~idx) { return false; } const item = Object.assign({}, DB[idx], req.body); item.id = id; DB.splice(idx, 1, item); return true; }) ) { return res.json({ status: 404, msg: '保存失败,数据可能已被删除!' }); } return res.json({ status: 0, msg: '保存成功' }); } function del(req, res, id) { const ids = id.split(','); console.log(ids); if ( !ids.every(function(id) { const idx = DB.findIndex(function(item) { return item.id == id; }); if (!~idx) { return false; } DB.splice(idx, 1); return true; }) ) { return res.json({ status: 404, msg: '保存失败,数据可能已被删除!' }); } return res.json({ status: 0, msg: '删除成功' }); } function bulkUpdate(req, res) { const rowDiff = req.body.rowsDiff; const ids = req.body.ids ? req.body.ids.split(',') : []; if ( !ids.length || !ids.every(function(id, index) { const idx = DB.findIndex(function(item) { return item.id == id; }); if (!~idx) { return false; } const item = Object.assign({}, DB[idx], rowDiff[index]); item.id = id; DB.splice(idx, 1, item); return true; }) ) { return res.json({ status: 404, msg: '保存失败,数据可能已被删除!' }); } return res.json({ status: 0, msg: '保存成功' }); } function bulkUpdate2(req, res) { const data = Object.assign({}, req.body); delete data.ids; const ids = req.body.ids ? req.body.ids.split(',') : []; if ( !ids.length || !ids.every(function(id, index) { const idx = DB.findIndex(function(item) { return item.id == id; }); if (!~idx) { return false; } const item = Object.assign({}, DB[idx], data); item.id = id; DB.splice(idx, 1, item); return true; }) ) { return res.json({ status: 404, msg: '保存失败,数据可能已被删除!' }); } return res.json({ status: 0, msg: '保存成功' }); }