我正在使用Nextjs 13.4.7和mongoose 7,并对我的next.config.js进行了必要的配置,如mongoose所给予:
/** @type {import('next').NextConfig} */
module.exports = {
webpack(config) {
config.module.rules.push({
test: /\.svg$/i,
issuer: /\.[jt]sx?$/,
use: ['@svgr/webpack'],
});
config.experiments = { ...config.experiments, topLevelAwait: true };
return config
},
experimental: {
serverComponentsExternalPackages: ["mongoose"],
appDir: true
},
}
字符串
但是,它仍然给出如下批次模块导入错误:
Module not found: Can't resolve 'kerberos' in '/home/krush/portfolioblog/blog/node_modules/mongodb/lib'
Import trace for requested module:
./node_modules/mongodb/lib/deps.js
./node_modules/mongodb/lib/index.js
./node_modules/mongoose/lib/index.js
./node_modules/mongoose/index.js
./lib/dbConnect.js
./app/posts/[postId]/page.js
./node_modules/mongodb/lib/deps.js
Module not found: Can't resolve '@mongodb-js/zstd' in '/home/krush/portfolioblog/blog/node_modules/mongodb/lib'
Import trace for requested module:
./node_modules/mongodb/lib/deps.js
./node_modules/mongodb/lib/index.js
./node_modules/mongoose/lib/index.js
./node_modules/mongoose/index.js
./lib/dbConnect.js
./app/posts/[postId]/page.js
./node_modules/mongodb/lib/deps.js
Module not found: Can't resolve 'aws4' in '/home/krush/portfolioblog/blog/node_modules/mongodb/lib'
Import trace for requested module:
./node_modules/mongodb/lib/deps.js
./node_modules/mongodb/lib/index.js
./node_modules/mongoose/lib/index.js
./node_modules/mongoose/index.js
./lib/dbConnect.js
./app/posts/[postId]/page.js
型
我该如何解决此问题?有人能提供正确的配置来解决这个错误吗?
PS.这个错误是因为NextJS规则,我们不能使用客户端组件('使用客户端'指令)与服务器组件。
1条答案
按热度按时间2vuwiymt1#
事实证明,你不能在客户端组件中使用mongoose(具有“使用客户端”)数据获取,因为它涉及到mongoose需要mongodb连接URI env变量,而该变量无法在客户端组件中访问。我是这样解决的:
方法错误
字符串
我的page.js组件的代码使用mongoose查询,这是一个客户端组件使用React状态等。
型
固定方法
新目录结构。
型
使用mongoose查询的page.js组件结构
型
PS.我也有一个问题,我无法使用没有
NEXT_APP_
前缀的env变量。这个答案也解决了这些问题。