|
@@ -0,0 +1,74 @@
|
|
|
|
|
+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
|