You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js API路由能否实现Rails式路径后缀自动识别format功能?

Next.js API路由实现可选格式后缀方案

Next.js完全可以实现类似Rails的可选格式后缀特性,且支持全局启用,无需逐个修改路由文件,具体实现如下:

1. 全局重写规则配置

首先在项目根目录的next.config.js中添加重写规则,自动捕获路径中的格式后缀并传递为参数,无需修改原有路由的文件命名结构:

/** @type {import('next').NextConfig} */
const nextConfig = {
  async rewrites() {
    return [
      {
        // 匹配所有带.格式后缀的API路径
        source: '/api/:path*.:format',
        // 重写到原无后缀路径,将格式作为查询参数传递
        destination: '/api/:path*?format=:format',
      },
    ]
  },
}

module.exports = nextConfig

2. 全局中间件统一处理

在项目根目录新增middleware.js文件,对所有API请求做统一预处理,自动设置请求头和格式参数,和Rails的全局特性逻辑对齐:

import { NextResponse } from 'next/server'

export function middleware(request) {
  const { searchParams, pathname } = request.nextUrl
  const format = searchParams.get('format')
  
  if (format) {
    // 可按需扩展支持的格式和对应Content-Type映射
    const contentTypeMap = {
      xml: 'text/xml',
      json: 'application/json',
      html: 'text/html',
      csv: 'text/csv',
    }
    const requestHeaders = new Headers(request.headers)
    // 将格式存入自定义请求头,API路由直接读取即可,等价于Rails的`params.format`
    requestHeaders.set('X-Request-Format', format)
    // 自动匹配对应Accept头,适配内置响应处理逻辑
    if (contentTypeMap[format]) {
      requestHeaders.set('Accept', contentTypeMap[format])
    }

    // 清理查询参数中的format字段,不影响原有接口的参数处理逻辑
    searchParams.delete('format')
    const targetUrl = pathname + (searchParams.size ? `?${searchParams.toString()}` : '')

    return NextResponse.rewrite(new URL(targetUrl, request.url), {
      request: { headers: requestHeaders }
    })
  }

  return NextResponse.next()
}

// 限定中间件仅作用于API路由,不干扰页面和静态资源
export const config = {
  matcher: '/api/:path*',
}

3. 接口内使用方法

配置完成后所有API路由默认支持后缀格式访问,不同路由模式下的取值方式如下:

  • Pages Router:直接从req.headers['x-request-format']获取格式值
  • App Router:通过headers().get('X-Request-Format')获取格式值

示例:访问/api/user/1.xml时,会自动转发到/api/user/1接口,读取到的格式值为xml,返回响应时直接设置对应Content-Type即可,完全匹配Rails的使用体验。

内容的提问来源于stack exchange,提问作者philk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 11:15:00