Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 在';下一个构建&x27;。适用于';下一代开发工具&x27;_Mongodb_Build_Yarn_Next.js - Fatal编程技术网

Mongodb 在';下一个构建&x27;。适用于';下一代开发工具&x27;

Mongodb 在';下一个构建&x27;。适用于';下一代开发工具&x27;,mongodb,build,yarn,next.js,Mongodb,Build,Yarn,Next.js,我有一个非常简单的NextJS9.3.5项目。 目前,它有一个页面/用户和一个从本地MongoDB表检索所有用户的pages/api/users 它使用“下一个开发人员”在本地构建良好 但是,它在“下一次构建”时失败,并出现错误 页面/用户 import fetch from "node-fetch" import Link from "next/link" export async function getStaticProps({ params }) { const res = awa

我有一个非常简单的NextJS9.3.5项目。 目前,它有一个页面/用户和一个从本地MongoDB表检索所有用户的
pages/api/users

它使用“下一个开发人员”在本地构建良好 但是,它在“下一次构建”时失败,并出现错误

页面/用户

import fetch from "node-fetch"
import Link from "next/link"

export async function getStaticProps({ params }) {
  const res = await fetch(`http://${process.env.VERCEL_URL}/api/users`)
  const users = await res.json()
  return { props: { users } }
}

export default function Users({ users }) {
  return (
    <ul>
      {users.map(user => (
        <li key={user.id}>
          <Link href="/user/[id]" as={`/user/${user._id}`}>
            <a>{user.name}</a>
          </Link>
        </li>
      ))}
    </ul>
  );
}
成纱

yarn run v1.22.4
$ next build
Browserslist: caniuse-lite is outdated. Please run next command `yarn upgrade`
> Info: Loaded env from .env
Creating an optimized production build

Compiled successfully.

> Info: Loaded env from .env
Automatically optimizing pages ..
Error occurred prerendering page "/users". Read more: https://err.sh/next.js/prerender-error:
FetchError: request to http://localhost:3000/api/users failed, reason: connect ECONNREFUSED 127.0.0.1:3000
你知道怎么回事吗?尤其是当它与“下一个开发人员”配合使用时


谢谢。

我几天前也试过了,但没用。。。因为当我们构建应用程序时,我们没有可用的本地主机。。。检查文档的这一部分——上面说:“您不应该从getStaticProps获取API路由…”-


(Next.js 9.3.6)

除了里卡多·卡内拉斯所说的,我还要更明确地说:

当您执行
next build
时,next会检查它检测到的所有可以静态生成的页面,即没有定义
getServerSideProps
,但可能定义
getStaticProps
getstaticpath
的所有页面

要构建这些页面,接下来调用
getstaticpath
确定要构建哪些页面,然后调用
getStaticProps
获取构建页面所需的实际数据

现在,如果在
getstaticpath
getStaticProps
中执行API调用,例如对JSON后端REST服务器进行调用,则下一次构建将调用该API

然而,如果您已经将前端和后端很好地集成到一台服务器中,那么很可能您已经退出了开发服务器(
next dev
),现在正在尝试构建,以查看部署前是否仍然可以进行健全性检查

因此,在这种情况下,构建将尝试访问您的服务器,但它不会运行

正确的方法是,不必使用RESTAPI,只需直接从
getStaticPaths
getStaticProps
执行数据库查询即可。这段代码无论如何都不会在客户机上运行,只有在服务器上运行,它的效率也会比不必要地访问API(API随后间接调用数据库)稍微高一些


客户端API调用从React组件调用,而不是从
getStaticPaths
getStaticProps

调用
dev
build
之间的配置有什么不同?可能是不同的容器,不同的主机,连接到不同的数据库服务器?“您不应该从getStaticProps获取API路由”-检查文档的这部分:(v9.3.6)@RicardoCanelas,Aha,这很重要-并解决了问题。。谢谢超级的!我也回答了下面的问题。或者您可以从
getStaticProps
直接查询数据库/graphql以使其正常工作,或者只使用
getServerSideProps
。另一个解决方案是:在getstaticpath中,将“path”作为空数组返回,然后在构建时不会调用本地主机。。(但在这种情况下,无法使用
纱线导出导出
yarn run v1.22.4
$ next build
Browserslist: caniuse-lite is outdated. Please run next command `yarn upgrade`
> Info: Loaded env from .env
Creating an optimized production build

Compiled successfully.

> Info: Loaded env from .env
Automatically optimizing pages ..
Error occurred prerendering page "/users". Read more: https://err.sh/next.js/prerender-error:
FetchError: request to http://localhost:3000/api/users failed, reason: connect ECONNREFUSED 127.0.0.1:3000