我尝试在_app.js
中使用getInitialProps连接到示例mongoDB集合,但是遇到了Module not found: Can't resolve 'dns'
的问题_app.js
import { connectToDatabase } from '../middlewares/mongodb';
function MyApp({ Component, pageProps, prop }) {
return (
<Layout>
<Component {...pageProps} />
</Layout>
);
}
MyApp.getInitialProps = async (appContext) => {
const { db } = await connectToDatabase();
const data = await db
.collection('listingsAndReviews')
.find({})
.limit(10)
.toArray();
const prop = JSON.parse(JSON.stringify(data));
return { ...prop };
};
1条答案
按热度按时间huus2vyu1#
getInitialProps
在初始页面加载期间在服务器上运行,在客户端导航期间在客户端上运行。因此,getInitialProps
应该包含同构代码-能够在服务器和客户端环境中运行的代码。在您的示例中,您的代码需要Node.js环境(服务器),因此在浏览器上运行时会失败。
一个可能的解决方案是将数据库提取逻辑移到API路由。
在
getInitialProps
中,当fetchDbData
逻辑在服务器上运行时,您可以直接调用它;当fetchDbData
逻辑在客户机上运行时,您可以进行API调用。这确保了数据库获取逻辑将始终在服务器环境中运行。