Skip to content

Commit

Permalink
koa项目
Browse files Browse the repository at this point in the history
  • Loading branch information
xiuxiumomo committed Apr 10, 2019
0 parents commit 7b1bfed
Show file tree
Hide file tree
Showing 23 changed files with 5,523 additions and 0 deletions.
12 changes: 12 additions & 0 deletions .idea/demo_koa.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

433 changes: 433 additions & 0 deletions .idea/workspace.xml

Large diffs are not rendered by default.

59 changes: 59 additions & 0 deletions app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
const Koa = require('koa');
const app = new Koa();
const views = require('koa-views');
const json = require('koa-json');
const onerror = require('koa-onerror');
const bodyparser = require('koa-bodyparser');
const logger = require('koa-logger');
const Routers = require('./routes/index');
const cors = require('koa-cors');
const jwt = require('koa-jwt');
const secret = require('./config/secret');
const JWTToken = require('./middleware/JWTToken');

//开启jwt验证
app.use(JWTToken());
app.use(cors());
//注册和登录不需要验证
app.use(jwt({secret: secret.sign}).unless({
path: [
// 注册
/^\/api\/v1\/user\/register/,
// 登录
/^\/api\/v1\/user\/login/,
]
}))

// error handler
onerror(app);

// middlewares
app.use(bodyparser({
enableTypes: ['json', 'form', 'text']
}))
app.use(json());
app.use(logger());
app.use(require('koa-static')(__dirname + '/public'));

app.use(views(__dirname + '/views', {
extension: 'pug'
}))

// logger
app.use(async (ctx, next) => {
const start = new Date();
await next();
const ms = new Date() - start;
console.log(`${ctx.method} ${ctx.url} - ${ms}ms`);
})

// routes 注册路由
app.use(Routers.routes(), Routers.allowedMethods());


// error-handling
app.on('error', (err, ctx) => {
console.error('server error', err, ctx)
});

module.exports = app;
90 changes: 90 additions & 0 deletions bin/www
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
#!/usr/bin/env node

/**
* Module dependencies.
*/

var app = require('../app');
var debug = require('debug')('demo:server');
var http = require('http');

/**
* Get port from environment and store in Express.
*/

var port = normalizePort(process.env.PORT || '3000');
// app.set('port', port);

/**
* Create HTTP server.
*/

var server = http.createServer(app.callback());

/**
* Listen on provided port, on all network interfaces.
*/

server.listen(port);
server.on('error', onError);
server.on('listening', onListening);

/**
* Normalize a port into a number, string, or false.
*/

function normalizePort(val) {
var port = parseInt(val, 10);

if (isNaN(port)) {
// named pipe
return val;
}

if (port >= 0) {
// port number
return port;
}

return false;
}

/**
* Event listener for HTTP server "error" event.
*/

function onError(error) {
if (error.syscall !== 'listen') {
throw error;
}

var bind = typeof port === 'string'
? 'Pipe ' + port
: 'Port ' + port;

// handle specific listen errors with friendly messages
switch (error.code) {
case 'EACCES':
console.error(bind + ' requires elevated privileges');
process.exit(1);
break;
case 'EADDRINUSE':
console.error(bind + ' is already in use');
process.exit(1);
break;
default:
throw error;
}
}

/**
* Event listener for HTTP server "listening" event.
*/

function onListening() {
var addr = server.address();
var bind = typeof addr === 'string'
? 'pipe ' + addr
: 'port ' + addr.port;
debug('Listening on ' + bind);
}
3 changes: 3 additions & 0 deletions config/secret.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"sign": "secret"
}
163 changes: 163 additions & 0 deletions controllers/article.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,163 @@
const ArticleModel = require('../models/article');
const ServiceStatus = require('./status.config');

class articleController {
/**
* 创建文章
* @param ctx
* @returns {Promise.<void>}
*/
static async create(ctx) {
// 接收客服端
let req = ctx.request.body;
if (req.title // 文章标题
&& req.author // 文章作者
&& req.content // 文章内容
&& req.category // 文章分类
) {
try {
// 创建文章模型
const ret = await ArticleModel.createArticle(req);
// 把刚刚新建的文章ID查询文章详情,且返回新创建的文章信息
const data = await ArticleModel.getArticleDetail(ret.id);

ctx.response.status = 200;
ctx.body = {
code: 200,
msg: '创建文章成功',
data
}

} catch (err) {
ctx.response.status = 412;
ctx.body = {
code: 200,
msg: '创建文章失败',
data: err
}
}
} else {
ctx.response.status = 416;
ctx.body = {
code: 200,
msg: '参数不齐全',
}
}

}

/**
* 获取文章详情
* @param ctx
* @returns {Promise.<void>}
*/
static async detail(ctx) {
let id = ctx.params.id;
if (id) {
try {
// 查询文章详情模型
let data = await ArticleModel.getArticleDetail(id);
ctx.response.status = ServiceStatus.success.code;
ctx.body = {
code: ServiceStatus.success.code,
msg: ServiceStatus.success.msg,
data
}

} catch (err) {
ctx.response.status = ServiceStatus.fail.code;
ctx.body = {
code: ServiceStatus.fail.code,
msg: ServiceStatus.fail.msg,
err
}
}
} else {
ctx.response.status = 416;
ctx.body = {
code: 416,
msg: '文章ID必须传'
}
}
}

/*
* 查询文章列表
* page 分页数
* limit 每页数
*
* */
static async getList(ctx){
let param = ctx.request.body;
try {
let data = await ArticleModel.getArticleList(param);
ctx.response.status = ServiceStatus.success.code;
ctx.body = {
code: ServiceStatus.success.code,
msg: ServiceStatus.success.msg,
data
}
} catch (err) {
ctx.response.status = ServiceStatus.fail.code;
ctx.body = {
code: ServiceStatus.fail.code,
msg: ServiceStatus.fail.msg,
err

}
}
}
/*
* 修改文章
* */
static async updateArticle(ctx){
let data = ctx.request.body;
if(data.id){
const res = await ArticleModel.updateArticle(data);
ctx.response.status = ServiceStatus.success.code;
ctx.body = {
code: ServiceStatus.success.code,
msg: ServiceStatus.success.msg
}
}else{
ctx.response.status = ServiceStatus.fail.code;
ctx.body = {
code: ServiceStatus.fail.code,
msg: 'id为必选项'
}
}
}
/*
* 删除文章 id
* */
static async deleteArticle(ctx){
let data = ctx.request.body;

if(!isNaN(data.id)){
const res = await ArticleModel.deleteArticle(data);
if(res){
ctx.response.status = ServiceStatus.success.code;
ctx.body = {
code: ServiceStatus.success.code,
msg: ServiceStatus.success.msg
}
}else{
ctx.response.status = ServiceStatus.fail.code;
ctx.body = {
code: ServiceStatus.fail.code,
msg: 'id不正确'
}
}

}else{
ctx.response.status = ServiceStatus.fail.code;
ctx.body = {
code: ServiceStatus.fail.code,
msg: 'id为必选项'
}
}
}
}

module.exports = articleController;

16 changes: 16 additions & 0 deletions controllers/status.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
module.exports = {
success: {
code: 200,
msg: 'success'
},
fail: {
code: 404,
msg: 'fail'
},
service: {
code: 500,
msg: '服务错误'
}


}
Loading

0 comments on commit 7b1bfed

Please sign in to comment.