文件结构
app.js
const express = require('express');
const os = require('os');
const fs = require('fs');
const bodyParser = require('body-parser'); //调用模板
const app = express();
const PATH = '/mock/'; //json路径
const VIEWPATH = '/view/';
const PATHNAME = 'data'; //json文件名
// 允许访问静态文件
app.use('/assets', express.static('assets'));
app.use(express.static('view'));
app.use('/mock', express.static('mock'));
//创建application/json解析
app.use(bodyParser.urlencoded({
extended: true
}));
// 查
app.get('/getinfo', function (req, res) {
const query = req.query; //get请求 获取参数
console.log(__dirname + PATH + PATHNAME + '.json')
fs.readFile(__dirname + PATH + PATHNAME + '.json', function (err, data) {
if (err) {
console.error(err);
}
let datas = data.toString();
datas = JSON.parse(datas);
if (query && query.id) {
datas = datas.data.filter(item => String(item.id) === String(query.id))[0];
}
res.send(datas);
});
});
// 增
app.post('/add', function (req, res) {
const query = req.body; //post请求 获取参数
fs.readFile(__dirname + PATH + PATHNAME + '.json', function (err, data) {
if (err) {
console.error(err);
}
if (query) {
if (!query.hasOwnProperty("details")) {
res.send({
resCode: 1,
responseText: 'details为必填项'
});
return;
}
let datas = data.toString();
datas = JSON.parse(datas);
// 数据排序
datas.data.sort((a, b) => a.id - b.id);
// 添加 新对象
query.id = datas.data.length;
datas.data.push(query);
const datasStr = JSON.stringify(datas);
fs.writeFile(__dirname + PATH + PATHNAME + '.json', datasStr, function (err) {
if (err) {
console.error(err);
}
res.send({
resCode: 1,
responseText: '添加成功!'
});
});
}
});
});
// 删
app.post('/del', function (req, res) {
const query = req.body; //post请求 获取参数
fs.readFile(__dirname + PATH + PATHNAME + '.json', function (err, data) {
if (err) {
console.error(err);
}
if (query && query.id) {
let datas = data.toString();
datas = JSON.parse(datas);
// 查找id
const delIndex = datas.data.findIndex(item => String(item.id) === String(query.id));
datas.data.splice(delIndex, 1);
// 删除
const datasStr = JSON.stringify(datas);
fs.writeFile(__dirname + PATH + PATHNAME + '.json', datasStr, function (err) {
if (err) {
console.error(err);
}
res.send({
resCode: 1,
responseText: '删除成功!'
});
});
}
});
});
// 改
app.post('/updateDetails', function (req, res) {
const query = req.body; //post请求 获取参数
fs.readFile(__dirname + PATH + PATHNAME + '.json', function (err, data) {
if (err) {
console.error(err);
}
if (query && query.id) {
let datas = data.toString();
datas = JSON.parse(datas);
// 查找id
if (isJSON(decodeURIComponent(query.jsonModel))) {
for (const item of datas.data) {
if (String(item.id) === String(query.id)) {
item.details = JSON.parse(decodeURIComponent(query.jsonModel));
}
}
} else {
resErrorCode(res);
return;
}
// 修改
const datasStr = JSON.stringify(datas);
fs.writeFile(__dirname + PATH + PATHNAME + '.json', datasStr, function (err) {
if (err) {
console.error(err);
}
res.send({
resCode: 1,
responseText: '修改成功!'
});
});
}
});
});
// 测试链接
app.get('/', function (req, res) {
res.sendFile(__dirname + VIEWPATH + "index.html");
});
//监听
let server = app.listen(3000, function () {
const myHost = getIPAdress();
const port = server.address().port
console.log("接口地址为 http://" + myHost + ':' + port)
});
//获取本机ip
function getIPAdress() {
const interfaces = os.networkInterfaces();
for (const devName in interfaces) {
const iface = interfaces[devName];
for (let i = 0; i < iface.length; i++) {
const alias = iface[i];
if (alias.family === 'IPv4' && alias.address !== '127.0.0.1' && !alias.internal) {
return alias.address;
}
}
}
}
// 获取对象键值对 数量
function getObjLength(obj) {
return Object.keys(obj).length;
}
/*返回错误信息*/
function resErrorCode(res) {
res.send({
errorCode: 1,
responseText: '添加参数有误,请联系后台确认提交参数要求!'
});
}
// 判断是否是JSON字符串
function isJSON(str) {
if (typeof str == 'string') {
try {
var obj = JSON.parse(str);
if (typeof obj == 'object' && obj) {
return true;
} else {
return false;
}
} catch (e) {
console.log('error:' + str + '!!!' + e);
return false;
}
}
console.log('It is not a string!')
}
此基础示例为express入门示例,仅可用于前端配合mock插件自己模拟对接后台使用。
真要拿node做后台,需配合自己用的数据库,学习熟练SQL语法对数据库进行增删改查操作。
学习没有捷径可言,真要做好一个node后台,还要下很多功夫,也需要多个项目坑坑洼洼的磨练,加油吧。