server.js
mock用于模拟生成数据,mongoDB是数据库
const Mock = require('mockjs');
const express = require('express')
const server = express()
const bodyParser = require('body-parser')
server.use(bodyParser.json());
server.use(bodyParser.urlencoded({ extended: false }));
const path = require('path')
// 引入数据库 mongoDB
const db = require('ykt-mongo');
const col = db.collection('novel');
// test
col.insert({name:'test',text:'NOVEL'})
//服务器所有接口跨域访问设置
server.all('*', function(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, sessionToken'
);
// 设置服务器支持的所有跨域请求的方法
res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
if (req.method.toLowerCase() == 'options') {
// res.send(200); // 让options尝试请求快速结束
res.sendStatus(200)
} else {
next();
}
});
function getData(param) {
return Object.assign({
code: 10000,
msg: '操作成功',
data: {}
}, param);
}
// ==========================================================================
//虚拟数据
const sql_user = {
'admin': {
pwd: 123,
info: {
username: 'admin',
name: '小明',
sex: '男',
//1:管理员;2:普通用户
type: 1
}
},
'ljs': {
pwd: 3305,
info: {
username: 'ljs',
name: 'wqLius',
sex: '男',
//1:管理员;2:普通用户
type: 1
}
}
}
// ==========================================================================
//接口
//登录
server.post('/api/login', (request, responce) => {
const { username, password } = request.body;
const data = sql_user[username];
if (data) {
if (data.pwd == password) {
responce.json(getData({ msg: '登录成功', data: data.info }))
} else {
responce.json(getData({
msg: '密码错误',
code: 10001
}))
}
} else {
responce.json(getData({
msg: '用户名不存在',
code: 10002
}))
}
})
//退出
server.get('/api/exit', (request, responce) => {
responce.json(getData({ msg: '退出成功' }))
})
/* 学生相关*/
// {id:编号 num:学号 name:姓名 className:班级 birth:生日 phone:手机 major:专业 address:地址 score::评分}
function getStudentList(className = '计算机一班') {
return Mock.mock({
'page': 1,
'count': 28,
'list|10-100': [{
'id|+1': 1,
'num|+1': 1,
'name': '@cname',
'sex|1': ['男', '女'],
'birth': '@date',
//'major': '@ctitle',
'major|1': ['计算机科学与技术','软件工程','JavaScript ES8','大数据','人工智能','软件技术',
'汉语言文学','人力资源管理','英语','信息安全','智能医疗','生物科技'],
'address': '@county(true)',
'score|20-100': 1,
phone() {
let { num } = Mock.mock({ 'num|11111111-9999999': 1 })
return `136${num}`;
},
className
}]
})
}
const studentList = getStudentList()
server.post('/api/student/add', (request, responce) => {
let fields = ['num', 'name', 'className', 'birth', 'phone', 'major', 'address', 'score'];
const dd = request.body || {};
const { list } = studentList;
if (fields.every(field => dd[field])) {
dd.id = list.length + 1
list.push(dd);
responce.json(getData({ data: studentList }))
} else {
responce.json(getData({ msg: '学生信息不完整', code: 10003 }))
}
})
server.get('/api/student/delete', (request, responce) => {
const dd = request.query || {};
const { list } = studentList;
if (dd.id) {
let idx = list.findIndex(item => item.id == dd.id);
if (idx === undefined) {
responce.json(getData({ msg: '找不到对应的学生', code: 10003 }))
} else {
list.splice(idx, 1)
responce.json(getData({ data: studentList }))
}
} else {
responce.json(getData({ msg: '学生id为必要参数', code: 10003 }))
}
})
server.post('/api/student/edit', (request, responce) => {
const dd = request.body || {};
const { list } = studentList;
if (dd.id) {
let item = list.find(item => item.id == dd.id);
if (item) {
Object.assign(item, dd)
responce.json(getData({ data: studentList }))
} else {
responce.json(getData({ msg: '找不到对应的学生', code: 10003 }))
}
} else {
responce.json(getData({ msg: '学生id为必要参数', code: 10003 }))
}
})
server.get('/api/student/list', (request, responce) => {
const { field, text, page = 1 } = request.query || {};
const { list } = studentList;
let data = { page, count: list.length };
let start = (page - 1) * 10;
let end = page * 10;
if (field && text) {
data.list = list.filter(item => item[field].toString().includes(text)).slice(start, end)
} else {
data.list = studentList.list.slice(start, end)
}
responce.json(getData({ data }))
})
// 指定服务器运行端口8080
server.listen(8080)
console.log('Server running at http://localhost:8686')
console.log('path=',path.join(__dirname));
const App = express(); //实例化一个express
/* 通过服务端口访问页面
设置服务资源文件位置 public
将html文件放在 public文件夹下,
即可使用 http://127.0.0.1:3305/index.html 访问index.html
或 http://192.168.0.100:3305/index.html 本机在局域网中的ip
*/
App.use(express.static("./public")).listen('3305');{
console.log('App listening at port 3305');
console.log('Use http://192.168.0.100:3305/index.html to index.html');
}