【问题标题】:NextJS middleware does not seem to be triggeredNextJS中间件好像没有被触发
【发布时间】:2023-01-26 14:32:52
【问题描述】:

我在/myproject/pages/middleware.js 中有middleware.js 文件:

export function middleware(request) {
  console.log(1);
  return NextResponse.redirect(new URL('/', request.url));
}

// See "Matching Paths" below to learn more
export const config = {
  matcher: ['/test'],
};

现在我期望的是,当我转到页面 /test 时,它应该将我重定向到 /。但是没有任何反应,我看到了我的标准 404 页面。

任何想法为什么?

NextJs版本:12.2.2

【问题讨论】:

  • 看起来缺少一些代码。你在哪里使用config

标签: next.js


【解决方案1】:

最新版本的 NextJS 要求用户在根文件夹中有一个中间件。

而不是{root}/pages/_middleware.js,试试{root}/middleware.js

【讨论】:

  • 更准确地说,中间件文件必须与 pages 文件夹处于同一级别,如果您使用的是 src 文件夹,则它不一定位于根目录中。见nextjs.org/docs/advanced-features/middleware#using-middleware
  • 我们有 monorepo,中间件在一个项目中工作,但在其他项目中不工作。我看不出有任何理由不这样做。
【解决方案2】:

对于下一个13.0.2 / 13.0.1如果你正在使用应用目录:真(实验性的)

如果你想点击中间件:

  1. 将 middleware.ts 放在根项目中: (与“应用程序”文件夹相同的层次结构,不在应用程序文件夹内......)

  2. 确保 tsconfig 包含:[..., "middleware.ts"]

  3. 制作空的“页面”文件夹。 (基于issue

  4. 将命中每个请求:

    import { NextResponse } from 'next/server'
    import type { NextRequest } from 'next/server'
    
    export function middleware(request: NextRequest ) {
        console.log('lol!!!')
    }
    
    export const config = {
      matcher: '/',
    }

【讨论】:

    猜你喜欢
    • 2021-07-18
    • 1970-01-01
    • 2019-11-02
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 2014-11-29
    相关资源
    最近更新 更多