diff --git a/app/app.js b/app/app.js new file mode 100644 index 0000000..2a4acea --- /dev/null +++ b/app/app.js @@ -0,0 +1,17 @@ +const Koa = require('koa') +const logger = require('koa-morgan') +const router = require('./router') +const koaBody = require('koa-body') + +const app = new Koa() + +app +.use(logger('":method :url" :status :res[content-length] ":referrer" ":user-agent"')) +.use(koaBody()) +.use(router.routes()) + +app.listen(3003, () => { + console.log("Server is listening on port 3003"); +}) + +module.exports = app diff --git a/app/controller.js b/app/controller.js new file mode 100644 index 0000000..6903dc1 --- /dev/null +++ b/app/controller.js @@ -0,0 +1,76 @@ +const Player = require('./schema') + +function response(code,mess,data){ + return{ + code: code, + mess: mess, + data: data + } +} + +exports.get_player = async (ctx, next) => { + let { id } = ctx.params + if(!id) + ctx.body = response(400,'Invalid ID supplied') + id = Number(id) + let player = await Player.findOne({id},{_id:0,__v:0}) + if(player){ + ctx.body = response(200,'successful operation',player) + }else + ctx.body = response(404,'Player not found') +} + +exports.add_player = async (ctx, next) => { + let { id,name,position } = ctx.request.body + if(!id || name || position) + ctx.body = response(405,'Invalid input') + + id = Number(id) + name = String(name) + position = String(position) + let player = await Player.findOne({id,name,position}) + if(player) + ctx.body = response(405,'player has already existed') + + let players = new Player({ + id,name,position + }) + await players.save() + let result = await Player.findOne({id,name,position},{_id:0,__v:0}) + ctx.body = response(200,'successful operation',result) +} + +exports.edit_player = async (ctx, next) => { + let { id,name,position } = ctx.request.body + if(!id) + ctx.body = response(400,'Invalid ID supplied') + + id = Number(id) + let player = await Player.find({id}) + if(player.length<0) + ctx.body = response(404,'Player not found') + + let result = await Player.update({id},{name,position}) + if(result.nModified>0){ + ctx.body = response(200,'successful operation') + }else{ + ctx.body = response(405,'Validation exception') + } +} + +exports.del_player = async (ctx, next) => { + let { id } = ctx.params + if(!id) + ctx.body = response(400,'Invalid ID supplied') + + id = Number(id) + let player = await Player.findOne({id}) + if(!player) + ctx.body = response(404,'Player not found') + let result = await Player.deleteOne({id}) + if(result.deletedCount>0){ + ctx.body = response(200,'successful operation') + }else{ + ctx.body = response(200,'failed operation',) + } +} \ No newline at end of file diff --git a/app/db.js b/app/db.js new file mode 100644 index 0000000..0b2e3a7 --- /dev/null +++ b/app/db.js @@ -0,0 +1,14 @@ +const mongoose = require('mongoose'); + +mongoose.connect('mongodb://127.0.0.1:27017/wuqiao', { + useNewUrlParser: true + }) + .then( + () => { + console.log('数据库连接成功') + }, + err => { + console.log(`数据库连接失败${err}`) + } + ) +module.exports = mongoose \ No newline at end of file diff --git a/app/package.json b/app/package.json index 6b480b3..658bc4c 100755 --- a/app/package.json +++ b/app/package.json @@ -5,12 +5,16 @@ "description": "Building a RESTful CRUD API with Node.js, Express/Koa and MongoDB.", "main": "server.js", "scripts": { - "start": "NODE_ENV=development node server.js", + "start": " node app.js", "start:prod": "NODE_ENV=production node server.js", "test": "echo \"Error: no test specified\" && exit 1" }, "dependencies": { "express": "^4.17.1", + "koa": "^2.11.0", + "koa-body": "^4.1.1", + "koa-morgan": "^1.0.1", + "koa-router": "^8.0.8", "mongoose": "^5.9.2" }, "devDependencies": { diff --git a/app/router.js b/app/router.js new file mode 100644 index 0000000..34eea57 --- /dev/null +++ b/app/router.js @@ -0,0 +1,10 @@ +const Router = require('koa-router') +const player = require('./controller') + +const router = new Router() +router.post('/player',player.add_player) +router.get('/player/:id',player.get_player) +router.put('/player',player.edit_player) +router.delete('/player/:id',player.del_player) + +module.exports = router \ No newline at end of file diff --git a/app/schema.js b/app/schema.js new file mode 100644 index 0000000..ff19793 --- /dev/null +++ b/app/schema.js @@ -0,0 +1,17 @@ +const mongoose = require('./db'); +const Schema = mongoose.Schema; + +const playerSchema = new Schema({ + + id: Number, + name: { + type: String, + required: true + }, + position: { + type: String, + enum: ['C', 'PF', 'SF', 'PG', 'SG'] + } +}) +const Plyaer = mongoose.model('player', playerSchema) +module.exports = Plyaer \ No newline at end of file diff --git a/app/server.js b/app/server.js deleted file mode 100755 index 72e5b39..0000000 --- a/app/server.js +++ /dev/null @@ -1,11 +0,0 @@ -const express = require('express'); - -const app = express(); - -app.get('/', (req, res) => { - res.json({"message": "Building a RESTful CRUD API with Node.js, Express/Koa and MongoDB."}); -}); - -app.listen(3000, () => { - console.log("Server is listening on port 3000"); -}); \ No newline at end of file