突然,我的中间件在部署中停止了工作.错误是:

> Build error occurred
NestedMiddlewareError: Nested Middleware is not allowed, found:
pages/_middleware
Please move your code to a single file at /middleware instead.

Vercel语句是:例如,位于pages/about/u中间件的中间件.ts可以将逻辑移动到/中间件.在存储库的根目录中.然后,条件语句只能用于在与about/*路径匹配时运行中间件:

当我使用pages/u中间件运行本地构建时.ts它完成时没有任何错误,就像今天生产时一样.如果我将其更改为页面/中间件.ts局部故障:

./pages/middleware.ts
2:1  Error: next/server should not be imported outside of pages/_middleware.js. See: https://nextjs.org/docs/messages/no-server-import-in-page  @next/next/no-server-import-in-page

中间件文件:

import { getToken } from "next-auth/jwt";
import { NextRequest, NextResponse } from "next/server";

export async function middleware(req: NextRequest, res: NextResponse) {
  if (req.nextUrl.pathname === "/") {
    const session = await getToken({
      req,
      secret: process.env.JWT_SECRET,
      secureCookie: process.env.NODE_ENV === "production",
    });
    // You could also check for any property on the session object,
    // like role === "admin" or name === "John Doe", etc.
    if (!session) {
      const url = req.nextUrl.clone();

      url.pathname = "/login";

      return NextResponse.redirect(url);
    }
    // If user is authenticated, continue.
  }
}

推荐答案

有同样的问题.发现Next刚刚发布了v12.2.0,这使中间件API变得稳定,并进行了一些突破性的更改.查看此处的迁移指南https://nextjs.org/docs/messages/middleware-upgrade-guide

我只需将我的中间件文件从/pages/_middleware.js移动并重命名为/middleware.js

此外,我还必须将功能迁移到新的URLPattern(在迁移指南中也有解释)

Javascript相关问答推荐

React存档iframe点击行为

具有相同参数的JS类

如何判断属于多个元素的属性是否具有多个值之一

TypScript界面中的Infer React子props

无法在nextjs应用程序中通过id从mongoDB删除'

Chromium会将URL与JS一起传递到V8吗?

更改JSON中使用AJAX返回的图像的路径

简单的PayPal按钮集成导致404错误

实现JS代码更改CSS元素

TinyMCE 6导致Data:Image对象通过提供的脚本过度上载

对具有相似属性的对象数组进行分组,并使用串连的值获得结果

未捕获语法错误:Hello World中的令牌无效或意外

FireBase FiRestore安全规则-嵌套对象的MapDiff

用另一个带有类名的div包装元素

JavaScript -复制到剪贴板在Windows计算机上无效

通过解构/功能组件接收props-prop验证中缺少错误"

输入数据覆盖JSON文件

Google OAuth 2.0库和跨域开放程序的问题-策略错误

检测带有委托的元素内部的点击,以及元素何时按其类名被选中

如何根据获取的对象数量动态生成状态变量