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

Serverless中间件未触发调用问题求助

Serverless AWS Node.js 中 serverless-middleware 中间件未被调用的问题

问题详情

我开发serverless aws-nodejs应用时,尝试用serverless-middleware实现认证中间件,用来检查会话Cookie并将用户ID附加到context中。但实际运行时,中间件完全没被调用——预期控制台会输出[Authorize] this is being run且返回401未授权响应,结果只有主处理器token.js的日志输出。

中间件代码(handlers/user/authorize.js)

async function handler(event, context) {
  let headers = {
    "Access-Control-Allow-Origin": event.headers.origin,
    "Access-Control-Allow-Credentials": true
  }

  console.log("[Authorize]", "this is being run")

  let cookies = CookieParser(event.headers.Cookie)

  if(!cookies.session) return { statusCode: 401, headers, body: JSON.stringify("Unauthorized") }

  const decoded = jwt.decode(cookies.session, process.env.JWT_SECRET)

  console.log("[Authorize.decoded]", decoded);

  if(!decoded.id) return { statusCode: 401, headers, body: JSON.stringify("Unauthorized") }
  
  return { context: { user: decoded.id } }
}

module.exports.handler = handler;

主处理器代码(handlers/user/token.js)

async function handler(event, context) {
  let headers = {
    "Access-Control-Allow-Origin": event.headers.origin,
    "Access-Control-Allow-Credentials": true
  }
  
  console.log("[User.Token.event]", event)
  console.log("[User.Token.context]", context)

  return { statusCode: 200, headers, body: JSON.stringify("Success") }
}

module.exports.handler = handler;

serverless.yml配置

functions:
  token:
    middleware:
      - handlers/user/authorize.handler
    handler: handlers/user/token.handler
    events:
      - http:
          path: /user/token
          method: get
          cors: true

解决方案

1. 确保serverless-middleware插件已安装并启用

这是最常见的遗漏步骤:

  • 先安装插件:
    npm install serverless-middleware --save-dev
    
  • 在serverless.yml顶部添加plugins配置,启用插件:
    plugins:
      - serverless-middleware
    

没有启用插件的话,middleware配置项不会被Serverless Framework识别,自然不会执行中间件。

2. 验证中间件路径正确性

检查handlers/user/authorize.handler的路径是否与项目文件结构匹配,确保相对于serverless.yml的位置是正确的(比如大小写、目录层级是否一致)。

3. 检查Serverless版本兼容性

旧版本的Serverless Framework可能和serverless-middleware存在兼容性问题,建议升级到稳定版:

npm update -g serverless

4. 确认中间件返回格式合规

虽然当前问题是中间件未执行,但后续测试时要确保中间件返回格式正确:

  • 若要继续执行主处理器,返回{ context: ... }
  • 若要终止流程直接返回响应,返回完整的HTTP响应对象(如你代码中的401返回格式)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 20:43:38