amis/mock/sample.js

216 lines
5.2 KiB
JavaScript

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: '保存成功'
});
}