server.js:
const Koa = require('koa');
const config = require('./config');
const opn = require('opn');
const network = require('./libs/network');
const Router = require('koa-router');
const {post, upload} = require('./libs/body');
const fs = require('promise-fs');
let server = new Koa();
(async ()=>{
server.context.db = await require('./libs/mysql')
server.context.redis = require('./libs/redis')
let error_404 = ''
try{
error_404 = await fs.readFile(config.errors_404)
error_404 = error_404.toString()
}catch(e){
console.log('read 404 file error')
}
let error_500 = ''
try{
error_500 = await fs.readFile(config.errors_500)
error_500 = error_500.toString()
}catch(e) {
console.log('read 500 file error')
}
// 全局错误处理
server.use(async (ctx, next)=>{
try{
await next();
if(!ctx.body) {
ctx.status = 404;
ctx.body = error_404 || 'Not Found'
}
}catch(e){
ctx.status = 500
ctx.body = error_500 ||'Internal Server Error'
console.log(e)
}
})
// router
server.use(require('./router'));
// session
await require('./libs/session')(server);
// post文件上传
let router = new Router()
// post + no upload
router.post('/api', post(), async ctx=>{
console.log(ctx.request.fields);
})
// post + upload
router.post(
'/upload',
...upload({
maxFileSize: 100 * 1024,
sizeExceed: async ctx=>{
ctx.body = 'aaa'
},
error: async ctx=>{
ctx.body = 'error'
}
}),
async ctx=>{
console.log(ctx.request.fields)
ctx.body = '上传成功'
}
)
server.use(router.routes())
// network
network.forEach(ip =>{
if(config.port == 80) {
console.log(`server running at ${ip}`);
}else{
console.log(`server running at ${ip}:${config.port}`);
}
})
server.listen(config.port)
opn(`http://localhost:${config.port}`)
})();