Как разделить маршруты с trie-route для коайс?

Как разделить маршруты с помощью trie-route для коайс?

app.js:

const Koa = require('koa')
const get = require('./routes/get')
const post = require('./routes/post')

const app = new Koa()

app.use(get)
app.use(post)
app.listen(3000)

маршруты /get.js:

'use strict'

const Router = require('koa-trie-router')

const router = new Router()

// middleware that is specific to this router
router.use(async (ctx, next) => {
  console.log('Time: ', Date.now())
  await next()
})

// define the home page route
router.get('/', async (ctx, next) => {
  ctx.type = 'json'
  ctx.body = {
    message: 'Birds home page'
  }
})

// Separate this post route in a new file.
// router.post('/', async (ctx, next) => {
//   ctx.type = 'json'
//   ctx.body = {
//     message: 'Post birds home page'
//   }
// })

module.exports = router.middleware()

маршруты /post.js:

'use strict'

const Router = require('koa-trie-router')

const router = new Router()

router.post('/', async (ctx, next) => {
  ctx.type = 'json'
  ctx.body = {
    message: 'Post birds home page'
  }
})

module.exports = router.middleware()

Когда я пытаюсь опубликовать это на своем почтальоне в http://127.0.1.1:3000/:

Method Not Allowed

Любые идеи, как я могу обойти это?

Мой package.js:

{
  "name": "basic",
  "version": "1.0.0",
  "description": "basic sample",
  "main": "app.js",
  "author": "xxx",
  "license": "BSD-2-Clause",
  "dependencies": {
    "koa": "^2.3.0",
    "koa-trie-router": "^2.1.5"
  },
  "keywords": [
    "kao",
    "nodejs"
  ]
}

1 ответ

Решение

Проблема, которую вы видите, связана с первым звонком app.use() имеет приоритет над следующим. Например, если я вместо этого сделаю следующее:

app.use(post)
app.use(get)

Тогда я получаю ту же ошибку, но на GET запрос. Чтобы заставить это работать, я вернул реальный маршрутизатор из routes/get.js а также routes/post.js, а затем настройте промежуточное ПО в app.js,

Так в вашем routes/get.js а также routes/post.js -

Вместо:

module.exports = router.middleware()

Экспорт:

module.exports = router

В app.js:

const Koa = require('koa')
const get = require('./routes/get')
const post = require('./routes/post')

const Router = require('koa-trie-router')

const router = new Router()

router.get(get.middleware());
router.post(post.middleware());

const app = new Koa()
app.use(router.middleware());
app.listen(3000)
Другие вопросы по тегам