Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 73 additions & 0 deletions app/app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
const Koa = require('koa');
const app = new Koa();
const path = require('path');
//压缩
let compress = require('koa-compress');

app.use(compress({
filter: function (content_type) {
return /text/i.test(content_type)
},
threshold: 2048,
flush: require('zlib').Z_SYNC_FLUSH
}));


const session = require('koa-session2');
const Store = require('./src/utils/redisStore');
const config = {
redis: {
port: 6379,
host: 'localhost',
family: 4,
// password: '123456',
db: 0
},
};
app.use(session({
store: new Store(config.redis),
maxAge: 12 * 60 * 60 * 1000,//有效时间
}));

//静态资源
const serve = require('koa-static');
let Static = path.join(__dirname, 'static');
app.use(serve(Static));


//图片上传
let koaBody = require('koa-body'); //解析上传文件的插件
app.use(koaBody({
multipart: true,
formidable: {
maxFileSize: 50 * 1024 * 1024,// 设置上传文件大小最大限制,默认50M
multipart: true, // 是否支持多文件上传 encoding:'utf-8',
uploadDir: path.join(__dirname, './static/images'),//文件上传的文件夹
keepExtensions: true, // 保持文件的后缀
},
stict: false,//严格模式,启用后不会解析 GET, HEAD, DELETE 请求 默认值 true
}));

//插件
const utils = require('./src/utils');
//配置文件,挂在挂载在ctx
app.context.$config = require('./config');
app.context.$utils = utils;
app.context.$json = require('./src/utils/writeJson')
//挂载服务
utils.setMiddlewareName(app, path.join(__dirname, './src/service'))

//错误事件监听
app.on('error', (err, ctx) => {
let path = ctx.path;
console.log(path, err);
ctx.response.type = 'html';
// ctx.response.status=500;
ctx.response.body = {
err: 4,
msg: err.message
}
});


module.exports = app;
14 changes: 14 additions & 0 deletions app/bin/server.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
const app = require('../app'); // 引入koa

/*
* 登录中间件
* */
app.use(require('./../src/middleware/auth'))


const www = require('../src/router/www')
app.use(www.routes()).use(www.allowedMethods());

app.listen(3000, () => {
console.log("Server is listening on port 3000");
});
4 changes: 4 additions & 0 deletions app/config/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
/*
* 配置文件
* */
module.exports = {}
16 changes: 12 additions & 4 deletions app/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,23 @@
"name": "node-examination",
"version": "0.0.1",
"description": "Building a RESTful CRUD API with Node.js, Express/Koa and MongoDB.",
"main": "server.js",
"main": "./bin/server.js",
"scripts": {
"start": "NODE_ENV=development node server.js",
"start:prod": "NODE_ENV=production node server.js",
"start": "node ./bin/server.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"dependencies": {
"express": "^4.17.1",
"mongoose": "^5.9.2"
"ioredis": "^4.27.2",
"koa": "^2.13.1",
"koa-body": "^4.2.0",
"koa-compress": "^5.0.1",
"koa-router": "^10.0.0",
"koa-session2": "^2.2.10",
"koa-static": "^5.0.0",
"mongoose": "^5.12.7",
"validate": "^5.1.0",
"zlib": "^1.0.5"
},
"devDependencies": {
"chai": "^4.2.0"
Expand Down
75 changes: 75 additions & 0 deletions app/src/controller/playerController.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
const validateSchema = {
createDate: {
type: Date,
required: String,
message: {
required: '请选择时间'
}
},//创建时间
name: {
type: String,
required: true
},//姓名
age: {
type: Number,
required: true
},//年龄
sex: { // 性别 1男 2女
type: Number,
enum: [1, 2]
},
description: {
type: String
},//描述
}

module.exports = {

async addPlayer(ctx) {
let body = ctx.request.body;
let obj = ctx.$utils.validate(validateSchema, body)
if (obj.err) {
ctx.$json(ctx, 'error', obj)
return false
}
await ctx.$playerService.create(body)
ctx.$json(ctx, 'success', '创建成功')
},

async deletePlayer(ctx) {
let id = ctx.params.id;
let arr = await ctx.$playerService.find({id})
if (!arr.length) {
ctx.$json(ctx, 'error', 'id错误')
return false
}
await ctx.$playerService.deleteOne({id});
ctx.$json(ctx, 'success', '删除成功')
},

async getPlayerById(ctx) {
let id = ctx.params.id;
let arr = await ctx.$playerService.find({id})
ctx.$json(ctx, 'success', arr[0])
},

async updatePlayer(ctx) {
let id = ctx.params.id;
let body = ctx.request.body;
let obj = ctx.$utils.validate(validateSchema, body)
if (obj.err) {
ctx.$json(ctx, 'error', obj)
return false
}
await ctx.$playerService.updateOne({id}, body)
ctx.$json(ctx, 'success')
},

async list(ctx) {
let query = ctx.request.query;
let data = await ctx.$playerService.pageQuery(query)
ctx.$json(ctx, 'success', data)
},


}
22 changes: 22 additions & 0 deletions app/src/middleware/auth.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
module.exports = async (ctx, next) => {
let url = ctx.url;
let params = ctx.params;
let admin_token = ctx.session.admin_token || '';
for (let p in params) {
let str = '/' + params[p];
url = url.replace(str, '');
}
const noAuth = ['/login', '/logout', '/', '/player'];
if (noAuth.includes(url)) {
return await next();
}

//未登录
if (!admin_token) {
ctx.$json(ctx, 'noLogin')
return false;
}


await next();
}
17 changes: 17 additions & 0 deletions app/src/model/player.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
const mongoose = require('mongoose')

module.exports = new mongoose.Schema({
date: Date,//记录时间
createDate: Date,//创建时间
name: String,//姓名
age: Number,//年龄
sex: { // 性别 1男 2女
type: Number,
enum: [1, 2]
},
description: String,//描述
status: { //审核状态 0未审核 1审核
type: Number,
enum: [0, 1]
}
})
15 changes: 15 additions & 0 deletions app/src/model/user.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
const mongoose = require('mongoose')
/*
* 用户表
* */
module.exports = new mongoose.Schema({
createDate: Date,//创建时间
account: String,//账号
password: String,//密码
token: String,//登录token
description: String,//描述
status: { //审核状态 0未审核 1审核
type: Number,
enum: [0, 1]
}
})
22 changes: 22 additions & 0 deletions app/src/router/www.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
const Router = require('koa-router'); // 引入koa-router
let router = new Router()
/*
* 玩家操作
* */
const player = require('../controller/playerController')
//添加
router.post('/player', player.addPlayer);
//删除
router.delete('/player/:id', player.deletePlayer);
//根据id获取单个信息
router.get('/player/:id', player.getPlayerById);
//更新
router.put('/player/:id', player.updatePlayer);
//列表
router.get('/player', player.list);

router.get('/',async (ctx)=>{
ctx.$json(ctx,'success','首页')
})

module.exports = router
46 changes: 46 additions & 0 deletions app/src/service/playerService.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
const db = require('./../utils/db')
const model = 'player'
module.exports = {
async create(data) {
data.date = Date.now();
data.status = 0;
return await db.create(model, data)
},

async updateOne(where, data) {
data.status = 0;
return await db.updateOne(model, where, data)
},

async deleteOne(where) {
return await db.deleteOne(model, where)
},

async find(where) {
return await db.find(model, where)
},

async pageQuery({page = 1, pageSize = 10, regStr = '', sort = '', endTime = '', startTime = ''}) {
let where = {};
if (startTime && endTime) {
where.createDate = {$lte: parseInt(endTime), $gte: parseInt(startTime)}
}
if (regStr) {
let $regex = new RegExp(regStr, 'gi');
where.$or = [
{name: {$regex}},
{description: {$regex}},
];
}
if (sort) {
try {
sort = JSON.parse(sort)
} catch (e) {
sort = {createDate: -1}
}
}
return await db.pageQuery({model, pageSize, page, where})

}

}
Loading