getServerSideProps 在生产中不渲染动态页面,并显示 404 错误

Posted

技术标签:

【中文标题】getServerSideProps 在生产中不渲染动态页面,并显示 404 错误【英文标题】:getServerSideProps does not render dynamic pages in production, and show 404 error 【发布时间】:2021-05-28 18:48:14 【问题描述】:

我正在使用 next.js,在开发模式下一切正常,但在生产模式下动态渲染页面时出现问题。 我在 pages 文件夹中有以下路径 pages/user/[id],这个组件就是我调用getServerSideProps函数的地方。


import headers from '../../headers';

export async function getServerSideProps(context) 

  const URL = 'https://somewhere...';

  let  id  = context.params;

  const apiResponse = await fetch(
    `$URL/$id/detail`,
    
      headers: headers,
    
  ); 
  if (apiResponse.ok) 
    
    const data = await apiResponse.json();
    return 
      props: data, // will be passed to the page component as props
    ;
   else    
    return  props:  ;
  
  


我的问题如下,我需要在headers 发送我仅在登录时获得的身份验证令牌并获得 2FA 代码,所以在build 时间,该信息不存在并且我得到一个执行 npm run build 和访问 /user/34 时出现 401 错误未授权,例如,我收到 404 错误。

我在 *** 上检查了这些问题:

NextJs: Static export with dynamic routes https://***.com/questions/61724368/what-is-the-difference-between-next-export-and-next-build-in-next-js#:~:text=After%20building%2C%20next%20start%20starts,can%20serve%20with%20any%20host.&text=js%20will%20hydrate%20your%20application,to%20give%20it%20full%20interactivity. next.js getStaticPaths list every path or only those in the immediate vicinity?

我的应用中有一些部分是静态的并且工作正常,但问题在于动态路径,因为 next.js 没有创建这些路径。

编辑:如果我只是说:

if(apiResponse) //without 'ok'


我会收到这个错误:

【问题讨论】:

您的代码中的headers 来自哪里?此外,getServerSideProps 不会在构建时调用,而是在对页面的每个请求时调用。 headers 是从其他文件导入的,它工作正常,如果 getServerSideProps 在每个请求上都被调用,我总是收到 404 响应,我不知道为什么。 【参考方案1】:
return 
      props: data, // will be passed to the page component as props
    

道具应该是对象

return 
          props: data // or props: data:data
        

【讨论】:

我也做了那个改变,最后我们用 node.js 改变了一个服务器,没有继续使用 nginx 服务器,一切正常。我真的不想说问题出在服务器 nginx 上,因为我想它可以配置它,但我不知道该怎么做。在使用基于服务器的 i node.js 的简历中,一切正常。

以上是关于getServerSideProps 在生产中不渲染动态页面,并显示 404 错误的主要内容,如果未能解决你的问题,请参考以下文章

Rails 4:为啥在生产中没有加载字体?

ActionCable - 无法在生产中升级到 WebSocket

砌体 jquery 不会在生产中呈现(Heroku)

在生产中禁用 graphiql

Tailwind 自定义背景图像在生产中不起作用

Sequelize:在生产中更改模型架构