【问题标题】:Serverless offline - middleware must contain at least one key among "before", "after", "OnError"无服务器离线 - 中间件必须包含“之前”、“之后”、“OnError”中的至少一个键
【发布时间】:2022-01-17 16:42:55
【问题描述】:

有没有人知道这种问题: 当尝试在任何函数的处理程序中包含中间件时,中间件必须包含“之前”、“之后”、“onError”中的至少一个键 - 在无服务器离线(节点 js)中。在这种情况下:我创建了一个 lambda 函数和一个 middy 中间件(verifyToken),我希望该中间件将它放在我的 lambda 函数处理程序上,但它一直向我显示我之前提到的消息;即使我的中间件已经有这些关键字。 这是我的中间件:

export const verifyToken = async function verifyToken(event, context) {
  return {
    before: async ({ event }, next) => {
      const headers = JSON.parse(event.headers);
      const bearerHeader = headers.authorization;
      if (typeof bearerHeader !== "undefined") {
        const bearer = bearerHeader.split(" ");
        const token = bearer[1];

        const verify = util.promisify(jwt.verify);

        const data = await verify(token, process.env.TOKEN_SECRET);
        event.user = data.user;
      } else {
        throw new Error("");
      }
    },
    onError: () => {
      return {
        statusCode: 401,
        body: JSON.stringify({
          message: "No Token Present",
        }),
      };
    },
  };
};

提前谢谢你。

【问题讨论】:

    标签: javascript lambda serverless-framework serverless


    【解决方案1】:

    中间件包装器不能是一个承诺。您还可以删除onError 步骤并使用handler.callback 使调用堆栈短路。

    // middy 1.x
    const verifyToken = () => {
      return {
        before: (handler, next) => {
          // ... logic
          } else {
            // Triggers middy to exit early
            return handler.callback(null,  {
              statusCode: 401,
              body: JSON.stringify({
                message: "No Token Present",
              }),
            })
          }
    
          next()
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-04-16
      • 2021-09-29
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 2018-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多