app.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. const Koa = require('koa')
  2. const app = new Koa()
  3. const views = require('koa-views')
  4. const json = require('koa-json')
  5. const onerror = require('koa-onerror')
  6. const bodyparser = require('koa-bodyparser')
  7. const logger = require('koa-logger')
  8. const cors = require('koa2-cors')
  9. // const koajwt = require('koa-jwt')
  10. const index = require('./routes/index')
  11. const users = require('./routes/users')
  12. const article = require('./routes/article')
  13. // error handler
  14. onerror(app)
  15. // middlewares
  16. app.use(bodyparser({
  17. enableTypes:['json', 'form', 'text']
  18. }))
  19. app.use(json())
  20. app.use(logger())
  21. app.use(require('koa-static')(__dirname + '/public'))
  22. // app.use((ctx, next) => {
  23. // return next().catch((err) => {
  24. // if (401 == err.status) {
  25. // ctx.status = 401;
  26. // ctx.body = 'Protected resource, use Authorization header to get access\n';
  27. // } else {
  28. // throw err;
  29. // }
  30. // });
  31. // });
  32. // app.use(koajwt({
  33. // secret: 'token'
  34. // }).unless({
  35. // path: [/^\/users\/login/, /^\/users\/register/, /^\/article/]
  36. // }))
  37. app.use(views(__dirname + '/views', {
  38. extension: 'pug'
  39. }))
  40. app.use(cors({
  41. origin: (ctx) => {
  42. return '*'
  43. },
  44. maxAge: 5,
  45. credentials: true,
  46. allowMethods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
  47. allowHeaders: ['Content-Type', 'Authorization', 'Accept'],
  48. exposeHeaders: ['WWW-Authenticate', 'Server-Authenticate']
  49. }))
  50. // logger
  51. app.use(async (ctx, next) => {
  52. const start = new Date()
  53. await next()
  54. const ms = new Date() - start
  55. console.log(`${ctx.method} ${ctx.url} - ${ms}ms`)
  56. })
  57. // routes
  58. app.use(index.routes(), index.allowedMethods())
  59. app.use(users.routes(), users.allowedMethods())
  60. app.use(article.routes(), article.allowedMethods())
  61. // error-handling
  62. app.on('error', (err, ctx) => {
  63. console.error('server error', err, ctx)
  64. });
  65. module.exports = app