将 Express Router 与 Next.js 结合使用

2023-12-24

我正在尝试将 Express Router 与 Next.js 结合使用定制快递服务器示例 https://github.com/zeit/next.js/blob/master/examples/custom-server-express/server.js作为我的样板。唯一的区别是我试图在 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;

代码在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;

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

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


您也可以尝试使用next-routes,我在我的所有下一个项目中使用它:

// server.js
const { createServer } = require('http');
const next = require('next');
const routes = require('./routes');

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

app.prepare().then(() => {
    createServer(handler).listen(port, err => {
        if (err) {
            throw err;
        }
        console.log(`> Ready on http://localhost:${port}`);
    });
});

然后你可以在配置你的路由routes.js文件而不访问应用程序:

// routes.js

const nextRoutes = require('next-routes');
const routes = (module.exports = nextRoutes());

routes
    .add('landing', '/')
    .add('blog', '/blog', 'blog')
    .add('blog-post', '/blog/:postId', 'blog')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Express Router 与 Next.js 结合使用 的相关文章

随机推荐

  • 如何在 bash 中编写看门狗守护进程?

    我想要一种在 shell 脚本中编写守护进程的方法 该守护进程循环运行另一个应用程序 如果它死了则重新启动它 运行时使用 myscript sh从 SSH 会话中 它将启动守护程序的新实例 除非守护程序已在运行 当 SSH 会话结束时 守护
  • Shared_ptr 的隐式转换

    我有 U 类和 T 类的两个共享指针 其中 T 是 U 的基数 进行隐式转换是没有问题的shared ptr u to shared ptr u
  • 如何在 Jetpack Compose 中从 URL 加载图像? [复制]

    这个问题在这里已经有答案了 嗯 我正在研究 Compose UI 而且我只专注于基本的事情 其中之一是使用 Glide 显示来自 URL 的图像 我已尝试以下代码 但未调用委托 onResourceReady 和 onLoadCleared
  • 访问 servlet 实例

    虽然我真的无法想到这种情况的实际用例 但我纯粹希望这是一个好奇心驱动的问题 我知道 servlet 容器保存着 servlet 创建的所有实例 并将请求线程委托给这些实例 对这些实例进行管理也是有意义的 以避免在容器权限之外进行无根据的调用
  • 有没有办法在线程创建/销毁时调用库线程本地初始化/清理?

    这个问题类似于如何在线程创建和退出时调用函数 https stackoverflow com questions 42229612 how to call a function on a threads creation and exit但
  • iPhone 版本的“显示包内容”显示空白 PNG?

    所以我成功地完成了我的第一个 iPhone 版本构建 当我好奇地转到新鲜出炉的 app 文件的 显示包内容 时 我注意到所有包含的 PNG 都是空白的 它们都设置为适当的分辨率 但是当我打开它们时 除了默认的 Preview app 灰色之
  • 如何在 Ruby 中找到字符串的第一个非重复字母?

    我有一根绳子 teststring 我想在 Ruby 中找到第一个非重复字符 我有这个Python代码 def first non repeat character teststring unique repeated for charac
  • Flask-登录不重定向到上一页

    我看到了很多与此相关的问题 但无法解决我的问题 我有一个 Flask 应用程序 带有 Flask login 用于会话管理 而且 当我尝试在不登录的情况下查看页面时 我会被重定向到以下形式的链接 login next 2Fsettings
  • 手动将元素添加到 d3 中的选择中

    我正在尝试以编程方式在 d3 中创建一个表 其顶部有四分之一 左侧有值 给定一个四分之一向量 q1 q2 q3 q4 我想要表格 q1 q2 q3 q4 v1 v2 运行下面的代码时我得到的是 q2 q3 q4 v1 v2 请注意 第一列缺
  • DriveApp.GetFoldersByName() 始终返回 true

    我一直在玩谷歌驱动器脚本 我需要从电子表格创建一个文件夹 以防具有该名称的文件夹不存在 但问题是 它说该文件夹存在 即使它不存在 支票位于try功能 像这样 try currentName is the name of the folder
  • 如何获取具有系统托盘图标的进程

    我正在尝试创建获取具有系统托盘图标的进程列表的应用程序 我进行了大量搜索并找到了一些参考资料 http www raymond cc blog find out what program are running at windows sys
  • AVAudioPlayer 不播放文件夹内的歌曲?

    我使用此代码来播放歌曲 但它不播放除文档目录之外的文件夹或文件夹中的歌曲 NSString songname NSString stringWithFormat songArray songIndex NSLog songname song
  • Flexbox justify-content 无法与变换比例正常工作

    我有一个常规的无序列表项目display flex and justify content space between应用于它 结果 first item触及左边缘 list and last item触及右边缘 list ul class
  • 如何在编译时强制执行非泛型类型

    考虑一个通用函数 def genericFn T fn T gt Boolean Unit do something involves T 是否可以限制T 在编译时 是一个简单类型 而不是类似的类型List Int 我想解决的底层问题是这样
  • 清除应用缓存时,Firebase 匿名身份验证是否仍然存在?

    我发现 Firebase 匿名身份验证非常有趣 我愿意在我的 Android 应用程序中实现它 我读到 身份验证无法在应用程序卸载后继续存在 但是当用户故意清除应用程序缓存时 身份验证是否仍然存在 设置 应用程序 我的应用程序 应用程序信息
  • gke nginx lb 运行状况检查/无法使所有实例处于“健康”状态

    使用nginxnginx ingress controller 0 9 0 下面是谷歌云负载均衡器的永久状态 基本上 单个健康节点是运行 nginx ingress controller pod 的节点 除了在这个屏幕上看起来不太好之外 一
  • Java XML 解析 - 合并 xi:include 的输出

    我有一个 XML 文件 其中包含以下内容
  • Java 线程基础知识

    下面两个线程调用有什么区别 这两个调用的行为会类似吗 注意 我没有同时使用 1 和 2 这是最好的选择 private void startConnections ServerThread server new ServerThread s
  • 从packages.config安装私有源Nuget包

    我在我们的一台内部服务器上有一个私人 nuget feed 我可以像这样从命令行安装此提要中的包 nuget install PackageName source DevServer NugetFeed 但是 如果我尝试从我们的packag
  • 将 Express Router 与 Next.js 结合使用

    我正在尝试将 Express Router 与 Next js 结合使用定制快递服务器示例 https github com zeit next js blob master examples custom server express s