Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从外部静态JSON文件检索数据并在AWS Lambda中使用_Javascript_Node.js_Json_Amazon Web Services_Aws Lambda - Fatal编程技术网

Javascript 从外部静态JSON文件检索数据并在AWS Lambda中使用

Javascript 从外部静态JSON文件检索数据并在AWS Lambda中使用,javascript,node.js,json,amazon-web-services,aws-lambda,Javascript,Node.js,Json,Amazon Web Services,Aws Lambda,我希望根据发送到AWS Lambda的事件从外部静态JSON文件中提取一些数据 因此,当有人发送“customer_id”时,我们会从外部JSON文件中提取匹配的“email”和“option” 这是我到目前为止的代码 const AWS = require('aws-sdk'); const ses = new AWS.SES(); const request = require('request'); exports.handler = (event) => { conso

我希望根据发送到AWS Lambda的事件从外部静态JSON文件中提取一些数据

因此,当有人发送“customer_id”时,我们会从外部JSON文件中提取匹配的“email”和“option”

这是我到目前为止的代码

const AWS = require('aws-sdk');
const ses = new AWS.SES();
const request = require('request');

exports.handler = (event) => {
    console.log(event.customer_id);

    request({
url: 'https://3objects.netlify.com/3objects.json',
method: 'GET',
headers: {
    Accept: 'application/json',
    'Content-Type': 'application/json'
},
body: JSON.stringify({
})
}, function (error, response) {
if (!error && response.statusCode == 200) {
    var jsonResponse = JSON.parse(body); // turn response into JSON

    // do stuff with the response and pass it back to Lambda...
});



    // After JSON data retrieval of 'email' and 'option' from https://3objects.netlify.com/3objects.json we send them an email with this info
    clientEmail = email;
    contact_option = option;

    var eParams = {Destination: {ToAddresses: [clientEmail]}, Message: {Body: { Text: { Data: 'Your contact option is ${contact_option}' },},Subject: { Data: "Your Contact Preference" }}, Source: "sales@example.com"};
    var email = ses.sendEmail(eParams, function (err, data) { if (err) console.log(err); else { console.log("===EMAIL SENT==="); } });
};

如何查询和使用外部JSON url数据?

一般来说,您应该发布您面临的确切错误,而不是一般问题。这将有助于帮助贡献者了解您所面临的问题

在上面的代码片段中

    // After JSON data retrieval of 'email' and 'option' from https://3objects.netlify.com/3objects.json we send them an email with this info
    clientEmail = email;
    contact_option = option;

    var eParams = {Destination: {ToAddresses: [clientEmail]}, Message: {Body: { Text: { Data: 'Your contact option is ${contact_option}' },},Subject: { Data: "Your Contact Preference" }}, Source: "sales@example.com"};
    var email = ses.sendEmail(eParams, function (err, data) { if (err) console.log(err); else { console.log("===EMAIL SENT==="); } });
请求返回之前执行。您需要在回调中移动该代码,以便在
请求完成时执行它

我还建议您将代码转换为
async
/
wait
,以提高可读性并避免此类错误。
请参阅本文了解如何做到这一点:

一般来说,您应该发布您面临的确切错误,而不是一般问题。这将有助于帮助贡献者了解您所面临的问题

在上面的代码片段中

    // After JSON data retrieval of 'email' and 'option' from https://3objects.netlify.com/3objects.json we send them an email with this info
    clientEmail = email;
    contact_option = option;

    var eParams = {Destination: {ToAddresses: [clientEmail]}, Message: {Body: { Text: { Data: 'Your contact option is ${contact_option}' },},Subject: { Data: "Your Contact Preference" }}, Source: "sales@example.com"};
    var email = ses.sendEmail(eParams, function (err, data) { if (err) console.log(err); else { console.log("===EMAIL SENT==="); } });
请求返回之前执行。您需要在回调中移动该代码,以便在
请求完成时执行它

我还建议您将代码转换为
async
/
wait
,以提高可读性并避免此类错误。 请参阅本文了解如何做到这一点:

我更喜欢使用。它是一个允许您从ES6使用
fetch
功能的包

我创建了一个使用节点获取的示例。函数
getCustomers
从url获取客户

然后我创建了一个函数,它返回一个
承诺
。在此承诺内,检索到的数据通过使用
AWS.SES()
的邮件发送

const AWS=require('AWS-sdk'),
ses=新的AWS.ses(),
fetch=require('node-fetch');
exports.handler=异步(事件)=>{
console.log(事件.客户id);
const customers=等待getCustomers();
customers.map(异步客户=>{
等待发送电子邮件给客户(客户);
});
}
异步函数getCustomers(){
试一试{
const resp=等待取数('https://3objects.netlify.com/3objects.json');
const json=await resp.json();
log(json);
返回json;
}
捕获(e){
投掷e;
}
}
const sendmailtocustomer=(客户)=>新承诺((解决、拒绝)=>{
ses.sendEmail({
目的地:
{ToAddresss:[customer.email]},
信息:
{
正文:{Text:{Data:`您的联系人选项是${customer.customer\u id}`},
主题:{Data:“您的联系人偏好”}
},
来源:“sales@example.com},(错误,结果=>{
如果(错误)返回拒绝(错误);
决心(结果);
控制台日志(结果);
})
}
我更喜欢使用。它是一个允许您使用ES6中的
获取
功能的软件包

我创建了一个使用节点获取的示例。函数
getCustomers
从url获取客户

然后,我创建了一个函数,返回一个
承诺
。在这个承诺中,检索到的数据通过邮件使用
AWS.SES()
发送

const AWS=require('AWS-sdk'),
ses=新的AWS.ses(),
fetch=require('node-fetch');
exports.handler=异步(事件)=>{
console.log(事件.客户id);
const customers=等待getCustomers();
customers.map(异步客户=>{
等待发送电子邮件给客户(客户);
});
}
异步函数getCustomers(){
试一试{
const resp=等待取数('https://3objects.netlify.com/3objects.json');
const json=await resp.json();
log(json);
返回json;
}
捕获(e){
投掷e;
}
}
const sendmailtocustomer=(客户)=>新承诺((解决、拒绝)=>{
ses.sendEmail({
目的地:
{ToAddresss:[customer.email]},
信息:
{
正文:{Text:{Data:`您的联系人选项是${customer.customer\u id}`},
主题:{Data:“您的联系人偏好”}
},
来源:“sales@example.com},(错误,结果=>{
如果(错误)返回拒绝(错误);
决心(结果);
控制台日志(结果);
})

}
这看起来不错,只是在我尝试运行它时“map”部分出错
无法读取未定义的属性“map”
@Gracie woops,我忘记返回获取的数据:)这看起来不错,只是在尝试运行它时“map”部分出错
无法读取未定义的属性“map”
@Gracie woops,我忘了返回提取的数据:)