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

Vercel无服务器函数:如何规范声明允许的请求方法?

在Vercel无服务器端点中声明允许请求方法的规范方式

Vercel的无服务器端点(包括Serverless Functions和Edge Functions)并没有像Express、Fastify这类框架那样,提供直接通过路由方法(如.get()、.post())绑定特定请求类型的语法。规范的做法是在端点的handler函数内部,通过判断request.method来筛选允许的请求方法,并做对应处理。

基础实现示例

下面是一个典型的处理逻辑,包含允许方法校验、CORS预检(OPTIONS请求)处理,以及不同方法的业务逻辑分支:

export default async function handler(request, event) {
  // 定义允许的请求方法集合
  const allowedMethods = ['GET', 'POST', 'PUT'];

  // 处理CORS预检的OPTIONS请求
  if (request.method === 'OPTIONS') {
    return new Response(null, {
      status: 204,
      headers: {
        'Allow': allowedMethods.join(', '),
        'Access-Control-Allow-Methods': allowedMethods.join(', '),
        // 根据需求添加其他CORS相关头部,比如Access-Control-Allow-Origin
      }
    });
  }

  // 校验当前请求方法是否在允许列表内
  if (!allowedMethods.includes(request.method)) {
    return new Response(JSON.stringify({ error: '不允许的请求方法' }), {
      status: 405,
      headers: {
        'Allow': allowedMethods.join(', '),
        'Content-Type': 'application/json'
      }
    });
  }

  // 根据不同请求方法处理业务逻辑
  switch(request.method) {
    case 'GET':
      return Response.json({ message: 'GET 请求处理完成' });
    case 'POST':
      const requestBody = await request.json();
      return Response.json({ message: 'POST 请求处理完成', receivedData: requestBody });
    case 'PUT':
      return Response.json({ message: 'PUT 请求处理完成' });
    default:
      // 理论上不会走到这里,因为前面已经做了方法校验
      return new Response(JSON.stringify({ error: '不允许的请求方法' }), { status: 405 });
  }
}

简洁场景示例

如果只需要允许单一请求方法,比如仅处理GET请求,可以简化逻辑:

export default async function handler(request) {
  if (request.method !== 'GET') {
    return new Response('仅支持GET请求', {
      status: 405,
      headers: { 'Allow': 'GET' }
    });
  }

  // 执行GET请求对应的业务逻辑
  return Response.json({ success: true, data: 'GET请求返回数据' });
}

核心要点

  • 通过request.method获取当前请求的HTTP方法
  • 明确声明允许的方法集合,对不合法的方法返回405 Method Not Allowed状态码
  • 在响应的Allow头部中告知客户端允许的请求方法,这是HTTP规范的要求
  • 若涉及跨域请求,需要额外处理OPTIONS预检请求,返回对应的CORS头部

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 17:42:25