将 Express Router 与 Next.js 结合使用

moy*_*010 5 express next.js

我正在尝试将 Express Router 与 Next.js 一起使用,并使用他们的custom-express-server 示例作为我的样板。唯一的区别是我试图在 paths/router.js 上外部定义路由,如下所示:

server.js 中的代码:

const express = require('express')
const next = require('next')

const port = parseInt(process.env.PORT, 10) || 3000
const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const handle = app.getRequestHandler()
const routes = require('./routes/router')

app.prepare()
  .then(() => {
    const server = express()

    server.use('/', routes)

    server.get('*', (req, res) => {
      return handle(req, res)
    })

    server.listen(port, (err) => {
      if (err) throw err
      console.log(`> Ready on http://localhost:${port}`)
    })
  })

module.exports = app;
Run Code Online (Sandbox Code Playgroud)

代码在routes/router.js中:

const express = require('express'),
app = require('../server.js'),
router = express.Router();

router.get('/a', (req, res) => {
  return app.render(req, res, '/b', req.query)
})

router.get('/b', (req, res) => {
  return app.render(req, res, '/a', req.query)
})

router.get('/posts/:id', (req, res) => {
  return app.render(req, res, '/posts', { id: req.params.id })
})

module.exports = router;
Run Code Online (Sandbox Code Playgroud)

此时,即使我从 server.js 导入“app”,app 在 router.js 中也不可用。

我的逻辑不正确吗?如果不是,那么为什么应用程序在 router.js 中不可用?

moy*_*010 1

刚刚解决了。这个问题被称为循环依赖,应该不惜一切代价避免它......除非您使用的模式(就像我使用的样板,我猜......)需要它。

要解决此问题,只需从文件“A”导出文件“B”使用的依赖关系,然后再在文件“A”上请求文件“B”即可。

...差不多就是这样了。

  • 您能提供解决方案的代码片段示例吗?我已经尝试过你所说的,但没有帮助。 (5认同)