1

我正在尝试在我的 Next.js 应用程序中使用npm pgwith 。pg-pool

我是池连接的新手,但我发现每当我的 Next.js 服务器初始化时我都需要建立一个池连接,并且我需要将该连接作为一个模块传递给我的应用程序。

来自 pg-pool 文档:

关于实例
的说明 池应该是应用程序中的长期对象。通常,您希望在应用程序启动时实例化一个池,并在应用程序的整个生命周期内使用同一个池实例。如果您经常在代码中创建新池,则您可能没有将池初始化代码放在正确的位置。

因此,我创建了文件my-app/lib/db.js来初始化我的连接,并希望在我需要运行查询时将其传递给我的应用程序。

但是,当我尝试时import { Pool } from 'pg';出现错误: Module not found: Can't resolve 'fs'

我现在发现这个问题的理解是..

您不能在 Next.js 中间件中使用使用 fs 的 Node.js 库。尝试改用客户端库。

所以,我的问题是,如何在 Next.js 服务器节点上启动 postgres-pool 连接并通过它路由所有查询?我需要使用不同的包吗?真的不知道把它放在 Next.js 架构中的什么地方。

4

1 回答 1

1

如果您只使用“import { Pool } from 'pg';”导入它 在组件(不是 API 路由)中,如果不调用“getServerSideProps”或“getStaticProps”中的“Pool”对象,它将失败,因为 Nextjs 将在客户端包中包含“Pool”对象,这样您将尝试导入服务器浏览器中的 -side 模块“fs”。

如果您在“getServerSideProps”或“getStaticProps”中调用“Pool”,Nextjs 将知道不要在客户端包中包含“Pool”对象,问题将得到解决。

这里有一个很好的解释:https ://maikelveen.com/blog/how-to-solve-module-not-found-cant-resolve-fs-in-nextjs

于 2022-02-21T12:45:32.453 回答