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 cors = require('koa2-cors') // const koajwt = require('koa-jwt') const index = require('./routes/index') const users = require('./routes/users') const article = require('./routes/article') // 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((ctx, next) => { // return next().catch((err) => { // if (401 == err.status) { // ctx.status = 401; // ctx.body = 'Protected resource, use Authorization header to get access\n'; // } else { // throw err; // } // }); // }); // app.use(koajwt({ // secret: 'token' // }).unless({ // path: [/^\/users\/login/, /^\/users\/register/, /^\/article/] // })) app.use(views(__dirname + '/views', { extension: 'pug' })) app.use(cors({ origin: (ctx) => { return '*' }, maxAge: 5, credentials: true, allowMethods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'], allowHeaders: ['Content-Type', 'Authorization', 'Accept'], exposeHeaders: ['WWW-Authenticate', 'Server-Authenticate'] })) // 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(index.routes(), index.allowedMethods()) app.use(users.routes(), users.allowedMethods()) app.use(article.routes(), article.allowedMethods()) // error-handling app.on('error', (err, ctx) => { console.error('server error', err, ctx) }); module.exports = app