为什么在单击仅调用 API 端点然后导航到正确页面的 next.js `Link` 时,我会得到 404 半秒?

IT技术 javascript node.js reactjs next.js
2021-05-14 00:17:08

嗨,

我在这里遵循了本指南:https : //auth0.com/blog/next-js-authentication-tutorial/(将带有护照的身份验证添加到 next.js)

我有一个简单的问题。

在我点击 next.js 的“/login”链接时,我可以看到这个错误大约 200 毫秒:

请求 URL:http://localhost:3000/_next/static/development/pages/login.js 请求方法:GET 状态码:404 Not Found

然后它会自动重定向到主页的根目录,因为它随后被成功验证(使用护照 Facebook)。

我仍然在问为什么我会在短时间内看到此错误?

这是客户端链接:

{!user && (
        <Link href="/login">
          <a>Log In</a>
        </Link>
      )}

这是服务器路由:

router.get("/login", passport.authenticate("facebook"));

router.get("/callback", (req, res, next) => {
  passport.authenticate("facebook", (err, user) => {
    if (err) return next(err);
    if (!user) return res.redirect("/login");
    req.logIn(user, err => {
      if (err) return next(err);
      res.redirect("/");
    });
  })(req, res, next);
});

是什么触发了这个错误?

我猜:

因为我使用 next.js 中的 "Link" 组件,该应用程序尝试查找名称为 "Login.js" 的页面。由于它不存在,因为它只是一个服务器 API,它显示了该错误。如果我是对的,如何摆脱它?伙计们!

到目前为止我尝试了什么:

我刚刚在他们的文档中找到了这个:https : //github.com/zeit/next.js/#disabling-file-system-routing

但这会破坏应用程序,因为它无法再解析任何页面。所以我猜不是这样:D

1个回答

我通过不使用Link而是只使用修复它<a href="/login">Login</a>

不知道这是否是正确的方法,所以我不会投票赞成解决这个问题。也许有人可以详细说明这是否是正确的方法。

这是我的导航现在的样子:

<div>
      <Link href="/">
        <a>Thoughts!</a>
      </Link>
      {user && (
        <>
          <Link href="/share-thought">
            <a>New Thought</a>
          </Link>
          <Link href="/profile">
            <a>Profile</a>
          </Link>

            <a href="/logout">Logout</a>

        </>
      )}
      {!user && <a href="/login">Log In</a>}
    </div>

(Logout 也使用 noLink因为我在这里也遇到了这个问题,我认为也是因为pages文件夹中没有 Logout.js )。