我想我在这里造成了某种混乱。
根据文档,如果我想要页面的服务器端渲染(SSR),我导出异步函数:
getServerSideProps
Run Code Online (Sandbox Code Playgroud)
但如果我这样做,我就无法构建在本地运行或现在 Zeit now 运行的项目。如果我尝试构建或部署我得到:
页面错误 /_error:
getServerSideProps无法导出页面。在此处查看更多信息: https: //err.sh/next.js/gssp-export
错误提供的链接表示我无法导出。但我使用了下面文档中的示例:
import React from "react"
export async function getServerSideProps() {
return { props: { } }
}
function Page({ data }) {
// Render data...
}
export default Page
Run Code Online (Sandbox Code Playgroud)
我必须在某处更改某些配置吗?
如何防止构建这个静态页面?
所以我在使用 vercel 的 nuxt 实现上遇到了这个问题,随机时刻该网站无法加载并抛出 502 http 错误,这是 vercel 的堆栈跟踪:
ERROR Unhandled Promise Rejection {"errorType":"Runtime.UnhandledPromiseRejection","errorMessage":"FetchError: request to {api_url} failed, reason: Client network socket disconnected before secure TLS connection was established","reason":{"errorType":"FetchError","errorMessage":"request to {api_url} failed, reason: Client network socket disconnected before secure TLS connection was established","code":"ECONNRESET","message":"request to {api_url} failed, reason: Client network socket disconnected before secure TLS connection was established","type":"system","errno":"ECONNRESET","stack":["FetchError: request to {api_url} failed, reason: Client network socket disconnected before secure TLS connection was established"," at ClientRequest.<anonymous> (server.js:16011:11)"," at ClientRequest.emit (events.js:315:20)"," at …Run Code Online (Sandbox Code Playgroud) 我有两台正在运行的 VERCEL 服务器。第一个用于服务器,第二个用于客户端。
服务器正在运行 NODE ->express ->express-sessions。
客户端正在使用 fetch api 运行 Svelte。
我的服务器正在正确设置 cookie 并发送它们,但我的浏览器没有保存 cookie。
我的 vercel.json 是:
{
"src": "/api/login",
"dest": "/api/index.js",
"headers": {
"Access-Control-Allow-Origin": "{mydomain}",
"Access-Control-Allow-Methods": "GET,OPTIONS,PATCH,DELETE,POST,PUT",
"Access-Control-Allow-Headers": "X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version",
"Access-Control-Allow-Credentials": "true"
},
"continue": true
},
Run Code Online (Sandbox Code Playgroud)
快递应用程序是:
app.set('trust proxy', 1);
app.use(cookieParser("secretcode"));
app.use(session({
secret: "secretcode",
resave: true,
saveUninitialized: true,
cookie: {
maxAge: 60000 * 10,
secure: true
},
store: new MongoStore({ mongooseConnection: mongoose.connection })
}))
app.use(passport.initialize());
app.use(passport.session());
Run Code Online (Sandbox Code Playgroud)
登录端点是:
const login = …Run Code Online (Sandbox Code Playgroud) 我非常喜欢 Next.js 的增量静态再生。
但是,我正在寻找一种根据需要强制重新生成静态页面的方法。理想情况下,通过一个命令,当我的源数据库中的数据发生变化时,我可以通过 API 调用触发该命令。
这个想法是在每次数据更改后只重新生成每个页面一次。我可以通过在重新验证间隔后获取目标页面来强制执行 ISR 页面的重新生成,但我正在寻找一种方法,在数据更改之前不冗余地重新生成它们。
任何想法是否可行以及如何?:-)
我正在我的网站上运行 Vercel 编译,但无法消除导出时的预渲染错误。有谁知道发生这种情况的原因并可以帮助我解决这个问题?我的 github 包含所有代码:https://github.com/M0rilla/MyProfile
每个页面都有一个错误,如上所述:
Error occurred prerendering page "/resume". Read more: https://nextjs.org/docs/messages/prerender-error
Error: Minified React error #321; visit https://reactjs.org/docs/error-decoder.html?invariant=321 for the full message or use the non-minified dev environment for full errors and additional helpful warnings.
Error: Export encountered errors on following paths:
21:20:09.541 /
21:20:09.541 /404
21:20:09.541 /500
21:20:09.541 /experiences
21:20:09.542 /resume
21:20:09.542 /skills
Run Code Online (Sandbox Code Playgroud)
我没有自定义 404 或 500 页面。
很抱歉无法提供可重现的示例。我们的团队无法可靠地重现该错误。我们已经调查该错误近一周了,但似乎没有取得任何进展。我们刚刚推出了next.js基于无头的 Shopify 商店(即使用 next.js 作为前端,使用 Shopify 处理从结帐开始的所有内容)。
这个错误是迄今为止我所见过的最奇怪的事情next.js,任何解决该问题的指示都值得赞赏。
您可以导航到www.everdrop.ch/it并打开控制台以查看一些损坏的链接。然而,由于这是生产,我们显然会尽力尽快修复它们。
几乎每次我们部署新版本时,我们都会在控制台中看到一些看似随机的 404,因为下次尝试预取 Links时。
404 的形式始终为https://domain/_next/data/<DEPLOYMENT>/<PATH>/slug.json有时PATH为eg category-pages,有时为空。
当单击控制台中的损坏链接之一时(.json,我会得到一个404:

导航到客户端的损坏页面也会给出 404

然而,当curl -I -L我得到一个200

检查 Vercel 中的输出数据时
一切都像魅力一样
请注意,URL 不同。这是相同的部署,但 URL 不同。
受影响的链接似乎是随机的。然而,有些人似乎比其他人更容易受到影响。
导航到该页面然后刷新或直接访问该页面确实会生成正确呈现的页面。令人惊讶的是,这也导致(对于大多数页面而言)初始错误消失。
在 vercel 上重新运行部署通常可以解决问题,并且许多损坏的链接将随机工作。有时这会导致其他损坏的链接。
我们使用Storyblok和Shopify作为数据提供者在构建期间进行查询。Shopify 用于产品数据,Storyblok 用于页面和内容数据。到目前为止,所有受影响的页面都是我们在构建期间从 Storyblok 提取数据的页面(这些页面是除搜索和产品页面之外的所有页面)。
我们用于next i18next多语言本地化。我们使用ENV变量来控制数据的来源来构建不同的商店。
我有非常基本的设置,即 getServerSideProps 和Vercel生产中的 Sentry 错误日志记录
export const getServerSideProps = async () => {
// some api call
if(error) {
throw new Error("Something went wrong")
}
return {
props: {
data
}
};
};
Run Code Online (Sandbox Code Playgroud)
_error.js看起来像这样
import * as Sentry from '@sentry/nextjs'
import { NextPageContext } from 'next'
import NextErrorComponent, { ErrorProps as NextErrorProps } from 'next/error'
const CustomErrorComponent = (props: NextErrorProps) => {
return <NextErrorComponent statusCode={props.statusCode} />
}
CustomErrorComponent.getInitialProps = async (contextData: NextPageContext) => {
await Sentry.captureUnderscoreErrorException(contextData)
console.log(contextData.res?.statusCode) // …Run Code Online (Sandbox Code Playgroud) 我有一个部署到 Vercel 的 nextjs 应用程序。当运行下一个开发时,我没有出现水合错误。但在部署到 Vercel 时,生产版本显示了几个缩小的反应错误。
我的问题:我不知道如何调试它们。由于反应错误已缩小,因此没有太多有用的信息。
有谁知道在这种情况下如何禁用错误缩小或如何获得正确的堆栈跟踪?
在 Next.js 9 教程中,推荐的导入共享组件的方法是通过相对路径,例如
import Header from '../components/Header';
Run Code Online (Sandbox Code Playgroud)
我想使用绝对进口,比如
import Header from 'components/Header';
Run Code Online (Sandbox Code Playgroud)
我如何在本地和使用 Now CLI 进行部署时使其工作?
使用教程中建议的设置,我的项目结构是:
my-project
??? components
??? pages
??? package.json
Run Code Online (Sandbox Code Playgroud) 我正在 Zeit Now 上从 Express 迁移到无服务器功能。
Stripe webhook 文档要求提供原始正文请求,使用 Express 时我可以通过 bodyParser 获取它,但是它如何在无服务器功能上工作?如何以字符串格式接收正文以验证条带签名?
支持团队将我重定向到这个文档链接,我很困惑,据我所知,我必须传入text/plain请求标头,但我无法控制它,因为 Stripe 是发送 webhook 的那个。
export default async (req, res) => {
let sig = req.headers["stripe-signature"];
let rawBody = req.body;
let event = stripe.webhooks.constructEvent(rawBody, sig, process.env.STRIPE_SIGNING_SECRET);
...
}
Run Code Online (Sandbox Code Playgroud)
在我的函数中,我req.body作为一个对象接收,我该如何解决这个问题?