Javascript 带websocket的无服务器lambda不';t保存接收到的数据
我试图使用Javascript从HTML表单访问node.js lambda函数之一,但lambda不保存数据 以下是HTML页面中的Javascript: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
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: