javascript - 将变量值从 JavaScript 函数传递到 SQL 查询 AWS Lambda
问题描述
我正在制作一个无服务器电话目录搜索应用程序。有两个文件:index.html 和 lambda_function.py
index.html 有一个 JS 函数、一个用于输入名称的文本字段和一个搜索按钮。Lambda_function.py 包含处理 CSV 的代码。
我无法将 index.html 文本框中的值传递给 lambda_function.py SQL 查询。浏览器调试器报告错误。
errorMessage: "name 'name_Person' is not defined"
errorType: "NameError"
stackTrace: Array [ " File \"/var/task/lambda_function.py\", line 12, in lambda_handler\n sql_q = \"SELECT * FROM s3object s where s.\\\"Name\\\" = ('%s')\" %name_Person\n" ]
在这种情况下,将用户输入的名称传递给 SQL 查询的正确方法是什么?
index.html 内容
<script>
function FindInPhoneBook() {
var name_person = $('#name').val();
if (name_person == "")
return;
fetch('https://xxx.eu-west-3.amazonaws.com/SecondStage', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: '{ "command": "find", "name_Person":"'+name_person+'" }'
}).then(function(data) {
$('#list_personal').val(data)
find();
data.json().then(function(bodyData) {
console.log(bodyData);
$('#list_personal').text(bodyData);
})
})
}
</script>
<div class = "border">
<input id="name" type="text">
<button onclick="FindInPhoneBook()">
Find
</button>
<br></br>
<div id='list_personal'></div>
</div>
lambda_function.py content
import json
import boto3
def lambda_handler(event, context):
res = ''
s3 = boto3.client('s3')
if(len(event) == 0):
with open('index.html','r') as file:
return file.read()
elif event['command'] == 'find':
#name = 'Vinod'
sql_q = "SELECT * FROM s3object s where s.\"Name\" = ('%s')" %name_Person
resp = s3.select_object_content(
Bucket='chumbacket',
Key='sample_data.csv',
ExpressionType='SQL',
Expression=sql_q,
InputSerialization = {'CSV': {"FileHeaderInfo": "Use"}, 'CompressionType': 'NONE'},
OutputSerialization = {'CSV': {}},
)
for event in resp['Payload']:
if 'Records' in event:
records = event['Records']['Payload'].decode('utf-8')
return records
elif 1==1:
pass
return res
解决方案
您可以通过使用 Lambda API 调用 Lambda 函数并调用调用方法将数据传递给 Lambda 函数。您可以将数据作为 JSON 数据传递给它。这是一个用 Java 实现的示例(但将向您展示如何使用 Lambda API 来调用 Lambda 操作并传递数据)
您可以在此处查看适用于 JavaScript v3 AWS Lambda 的 AWS 开发工具包示例。这是在 HTML 的脚本标记中使用的 API。
https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/javascriptv3/example_code/lambda
推荐阅读
- c# - 如何检查列表包含多少元素?C#
- swift - 如何在故事板中创建的 UILabel 上换行文本?
- excel - 如果输入的时间段多于 EXCEL-VBA 中的特定值,如何复制最后一个特定数量的值
- laravel - laravel 8 ->为具有多态关系的帖子添加评论和回复
- concurrency - 不同的并发范式如何比较?
- docker - Windows 10 上的 Docker 绑定 0.0.0.0:80 失败:端口已分配
- recursion - 在 Kusto Azure 数据资源管理器中构建树/运行递归查询
- php - $_SESSION 始终为空
- macos - NSItemProvider 在 SwiftUI MacOS 应用程序中没有注册类型标识符
- java - Android 读写 LocalDate 到 SharedPreferences 的麻烦