我使用wscat或通过node.js调用AWS API Gateway Websocket Route时出错

时间:2019-05-21 19:49:13

标签: websocket aws-api-gateway

我先创建一个websocket,然后创建一个自定义路由。发布之前,我需要为$disconnect$default选择一个集成,因为我都选择了Mock(我也尝试了默认的Lambda函数),因此可以发布。

然后我使用wscat呼叫

wscat -c wss://t0p5b2xpm3.execute-api.us-east-1.amazonaws.com/prod

套接字成功连接,然后我尝试调用路由

{"action":"echo", "data":"test response body"}

并出现以下错误。

{"message": "Internal server error", "connectionId":"aDH97cQJoAMCI8Q=", "requestId":"aDIAhGE8oAMFoEg="}

有人有什么想法吗?

谢谢

马特

2 个答案:

答案 0 :(得分:0)

对于lambda函数,您需要为statusCode200$connect和自定义路由返回$disconnect中的$default。一个简单的javascript示例:

module.exports.handler = async (event) => {
  return {
    statusCode: 200,
  };
};

答案 1 :(得分:0)

exports.handler = async (event) => {
  // TODO implement
  let time = "undefined";
  let state = "undefined";
  if (event.body !== null && event.body !== undefined) {
  let body = JSON.parse(event.body);
  if (body.time && body.state) 
      {
          time = body.time;
          state = body.state;
      }
  }
  const response = {
      statusCode: 200,
      body:   JSON.stringify({time:time, state: state}),
  };
  return response;
};

在使用API​​-Gateway的情况下,您将无法像Get and Post中一样将响应修改为json,因此您可以使用此代码从即将到来的json对象中获取时间和状态。使用wscat -c链接进行连接,然后将您的json发送为{"time":"22:32","state":"LA"}

尝试输入$ default以确保您以正确的方式收到发送邮件。

祝你好运!