実現したいこと
Serverless Framework+Websocketで動作するシステムを作成したい
前提
下記記事を元に作成しております
https://qiita.com/uta-member/items/fb2b7def0b3087b21060
上記のソースGitHub
https://github.com/Uta-member/aws-serverless-websocket-ts
wscatを使用して接続することは出来ているのですが、sendmessageのの実行にエラーが発生している状態です
エラー内容からモジュール内でbodyの代入分割処理で失敗しているのは理解しているのですが、解決方法が検討付かない状態です
wscat側の表示
Connected (press CTRL+C to quit) > {"action":"sendmessage","data":"hello!"} < {"connectionId":"79375a67-51a3-41c7-97f1-d4329444acac","message":"Internal server error","requestId":"1234567890"}
発生しているエラーメッセージ
(λ: sendMessage) RequestId: 2342a425-5aca-4909-827b-ee958fd9611c Duration: 2161.26 ms Billed Duration: 2162 ms × TypeError: Cannot destructure property 'body' of '(intermediate value)' as it is undefined. at WebSocketClients.#processEvent (file:///C:/Users/aws-serverless-websocket-ts-main/node_modules/serverless-offline/src/events/websocket/WebSocketClients.js:289:15)
該当のソースコード
TypeScript
1const sendMessage: APIGatewayProxyWebsocketHandlerV2 = async ( 2 event, 3 _context, 4 _callback 5) => { 6 try { 7 const apiManage = new ApiGatewayManagementApi({ 8 apiVersion: "2018-11-29", 9 endpoint: getEndpoint(event.requestContext), 10 }); 11 12 const data = encodeObjectToUint8Array({ 13 message: "message success!!", 14 body: event.body, 15 }); 16 17 // 送る処理 18 await apiManage.postToConnection({ 19 ConnectionId: event.requestContext.connectionId, 20 Data: data, 21 }); 22 23 return { 24 statusCode: 200, 25 body: "sendMessage", 26 }; 27 } catch (err) { 28 console.log(err); 29 } 30}; 31 32export const main = sendMessage;
エラー発生原因のWebSocketClients.js(2行目がエラー発生個所)
TypeScript
1try { 2 const { body } = await lambdaFunction.runHandler() 3 if ( 4 body && 5 routeKey !== '$disconnect' && 6 route.definition.routeResponseSelectionExpression === '$default' 7 ) { 8 // https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-route-response-selection-expressions 9 // TODO: Once API gateway supports RouteResponses, this will need to change to support that functionality 10 // For now, send body back to the client 11 this.send(connectionId, body) 12 } 13 } catch (err) { 14 log.error(err) 15 16 sendError(err) 17 }
試したこと
・serverless-offlineのバージョンのダウングレード、アップグレード
・モジュールの再インストール
あなたの回答
tips
プレビュー