koajs / router

Router middleware for Koa. Maintained by @forwardemail and @ladjs.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Koa Router not working on production NextJS

thangly98 opened this issue · comments

commented

Hi, The api link works normally in the dev version, but returns a 404 in production

node.js version: 14.16.0

npm/yarn and version: 1.22.5

@koa/router version: 10.0.0

koa version: ^2.13.1

Code sample (server.js):

const Koa = require('koa')
const cors = require('@koa/cors')
const next = require('next')
const Router = require('koa-router')
const nextRoutes = require('./next-routes')
const { join } = require('path')
const config = require('./config')

const port = parseInt(process.env.PORT, 10) || 3007
const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const handle = nextRoutes.getRequestHandler(app)
const koaBody = require('koa-body')

// const api = require('./koa/api');
const indexRoutes = require('./server/routes/index')
const axios = require('axios')
const Cookies = require('universal-cookie')

function isRoute(url) {
    if (url.indexOf('/_next') === 0) return false
    if (url.indexOf('/static') === 0) return false
    return true
}

app.prepare()
    .then(() => {
        const server = new Koa()
        const router = new Router()

        router.get('*', async (context) => {
            await handle(context.req, context.res)
            context.respond = false
        })

        server.use(async (context, next) => {
            context.res.statusCode = 200
            await next()
        })

        // 미들웨어
        server.use(koaBody({ multipart: true }))
        server.use(
            cors({
                origin: '*',
                allowMethods: ['GET', 'HEAD', 'PUT', 'POST', 'DELETE', 'OPTION', 'PATCH'],
                allowHeaders: ['Content-Type', 'Authorization'],
                exposeHeaders: ['Content-Length', 'Date', 'X-Request-Id'],
            })
        )
        // server.use(passport.initialize());

        // API
        server.use(indexRoutes.routes())

        server.use(router.routes())
        server.use(handle)
        server.listen(port, () => {
            console.info(`> Ready on http://localhost:${port}`)
        })
    })
    .catch((ex) => {
        // console.warn(ex)
        process.exit(1)
    })

Expected Behavior:

Actual Behavior:

Additional steps, HTTP request details, or to reproduce the behavior or a test case: