Javascript 带websocket的无服务器lambda不';t保存接收到的数据

Javascript 带websocket的无服务器lambda不';t保存接收到的数据,javascript,node.js,websocket,serverless,Javascript,Node.js,Websocket,Serverless,我试图使用Javascript从HTML表单访问node.js lambda函数之一,但lambda不保存数据 以下是HTML页面中的Javascript: let user = document.getElementById('userLogged'); let currentUser = user.textContent; let channel = document.getElementById

我试图使用Javascript从HTML表单访问node.js lambda函数之一,但lambda不保存数据

以下是HTML页面中的Javascript:

                let user = document.getElementById('userLogged');
                let currentUser = user.textContent;
                let channel = document.getElementById('channelLogged');
                let currentChannel = channel.textContent;
                let message = $("#messageText").val();
                let socket = new WebSocket(WEBS + currentChannel);

                socket.onopen = () => {
                    socket.send(JSON.stringify({
                        action: "sendMessage",
                        data: {
                            messageText: message,
                            username: currentUser,
                            currentChannel: currentChannel
                        }
                    }));
                }
            });  
这是我的lamba函数,用来发送和保存消息:


module.exports.sendMessageHandler = (event, context, callback) => {
    sendMessageToAllConnected(event).then(() => {
        callback(null, successfullResponse)
    }).catch (err => {
        callback(null, JSON.stringify(err));
    });
};

const sendMessageToAllConnected = (event) => {
    const body = JSON.parse(event.body);
    const message = body.data.messageText;
    const channel = body.data.currentChannel;
    const user = body.data.username;
  return getConnectionIds(channel).then(connectionData => {
    return connectionData.Items.map(connectionId => {
      return saveMessages.save(event, user, channel, message, connectionId.connectionId);
    });
  });
};

const getConnectionIds = channel => {
    const params = {
        TableName: CHATCONNECTION_TABLE,
        Key: {
            channel: channel
        },
        ProjectionExpression: 'connectionId'
    };
    return dynamo.scan(params).promise();
};


module.exports.getMessagesHandler = event => {
    const channel = event.queryStringParameters.channel;
    const params = {
        TableName: MESSAGE_TABLE,
        Key: {
          channel: channel
          },
        ProjectionExpression: 'username, messageDate, messageText'
    };
   return dynamo.scan(params).promise();
};

module.exports.save = (event, user, channel, message, connectionId) => {

    const body = JSON.parse(event.body);
    const postData = body.data;

    const endpoint = event.requestContext.domainName + "/" + event.requestContext.stage;
    const apigwManagementApi = new AWS.ApiGatewayManagementApi({
        apiVersion: "2018-11-29",
        endpoint: endpoint
    });

    const postParams = {
        connectionId : connectionId,
        Data: postData
    };

    const dbParams = {
        TableName: MESSAGE_TABLE,
        Item: {
            channel: channel,
            messageDate: Date.now(),
            username: user,
            messageText: message,
        }
    };
    dynamo.put(dbParams);

   return apigwManagementApi.postToConnection(postParams).promise();
};

sendMessageHandler的sls日志没有返回任何错误,但我看不到来自请求的任何结果。另外,我还有另一个lambda,它应该去获取所有保存的消息,但返回一个错误,即通道密钥未定义

module.exports.getMessagesHandler = event => {
    const channel = event.queryStringParameters.channel;
    const params = {
        TableName: MESSAGE_TABLE,
        Key: {
          channel: channel
          },
        ProjectionExpression: 'username, messageDate, messageText'
    };
   return dynamo.scan(params).promise();
};

有什么想法吗?

我解决了其中一个问题-更改了
const channel=event.queryStringParameters.channel
常量通道=event.query.channel现在我没有得到
频道
未定义的错误。但是现在我在将
getMessagesHandler
的结果附加到HTML中时遇到了一个问题。这是代码

                debugger;
                let user = $("#username").val();
                let channel = $("#channel").val();
                const URL = 'https://ktwdb7v696.execute-api.us-east-1.amazonaws.com/dev/getMessages?channel=';
                let realURL = URL + channel;
                $.ajax({
                    type: 'GET',
                    url: realURL,
                    success: function (data) {
                        $("#loginForm").css("visibility", "hidden");
                        $("#messageForm").css("visibility", "visible");
                        $("#messages").css("visibility", "visible");
                        // $("#userLogged").text(user);
                        // $("#channelLogged").text(channel);
                        document.getElementById('userLogged').innerHTML = user;
                        document.getElementById('channelLogged').innerHTML = channel;
                        document.getElementById('title').innerHTML = 'Please write a message to send';
                        data.Items.forEach(function (message) {
                            console.log(message.messageDate);
                            console.log(message.username);
                            console.log(message.messageText);
                            $('#messages').append('<p>Date: ' + message.messageDate + '</p>'
                                    + '<p>User: ' + message.username + '</p>'
                                    + '<p>Message: ' + message.messageText + '</p>'
                            );
                        });
                    }
                });
            });
调试器;
让用户=$(“#用户名”).val();
设channel=$(“#channel”).val();
常量URL=https://ktwdb7v696.execute-api.us-east-1.amazonaws.com/dev/getMessages?channel=';
让realURL=URL+频道;
$.ajax({
键入:“GET”,
url:realURL,
成功:功能(数据){
$(“#loginForm”).css(“可见性”、“隐藏”);
$(“#messageForm”).css(“可见性”、“可见”);
$(“#消息”).css(“可见性”、“可见”);
//$(“#userLogged”).text(用户);
//$(“#channelLogged”).text(channel);
document.getElementById('userLogged')。innerHTML=user;
document.getElementById('channelLogged')。innerHTML=channel;
document.getElementById('title').innerHTML='Please write a message to send';
data.Items.forEach(函数(消息){
console.log(message.messageDate);
console.log(message.username);
console.log(message.messageText);
$('#messages')。追加('日期:'+message.messageDate+'

' +“用户:”+message.username+“

” +“消息:”+Message.messageText+“

” ); }); } }); });

事实上,我认为根本没有什么可附加的,任何人都可以帮上忙?

Lambda不是全天候运行的,在这个意义上说,在调用Lambda函数之前,套接字是不会打开的。您是否有任何迹象表明它实际上正在运行?当我在终端中运行sls logs-f sendMessageHandler时,它不会返回任何错误,但返回的数据中也没有我发送的输入数据。它类似于请求Id started:和请求Id END: