[英]NodeMailer inside of Axios request on a AWS Lambda function
我必須承認我對 Javascript 和異步函數很陌生,我的主要專長是 Python 但我現在工作的客戶要求我使用 Node.js 開發一些功能。
我遇到的問題是在 Axios 請求鏈完成后使用NodeMailer發送 email。 這在 AWS 上的 Lambda function 內部。 在我的本地機器上,如果我從處理程序中提取代碼並執行它,它就像一個魅力。 然而,在 AWS 上,似乎從未到達發送 email 的代碼段。
exports.handler = async (event) => {
email_address = event.queryStringParameters.email_address;
// initialize nodemailer transport
let transporter = nodemailer.createTransport({
service: 'gmail',
port: 8000,
secure: false,
auth: {
user: 'username@gmail.com',
pass: 'PASS',
},
});
await axios({
method: 'GET',
url: 'https://api.a-service.com/accounts?email=' + email_address,
auth: {
username: username,
password: password
}
})
.then(response => {
// MY PIECE OF CODE
return some_values;
})
.then(some_values => {
axios({
method: 'GET',
url: 'https://api.a-service.com/orders/' + some_values,
auth: {
username: username,
password: password
}
})
.then(response => {
// MY PIECE OF CODE
return some_other_values;
})
.then(some_other_values => {
try{
transporter.sendMail({
from: "User",
to: email_address, // list of receivers
subject: "Hello " // Subject line
text: JSON.stringify(some_other_values), // plain text body
html: JSON.stringify(some_other_values), // html body
});
} catch (e) {
console.log(e);
}
});
})
.catch(error => {
errors = error;
})
if (errors){
return makeResponse(400, errors);
} else {
return makeResponse(200, 'Successful');
}
};
流程如下:
我很確定我在使用 promise 時犯了一些錯誤,因為我發現它們與我通常使用同步代碼的方式完全不同。
感謝任何人的任何提示!
對axios()
的第二次調用異步運行,但您不等待它,或在 promise 鏈中返回它。
將調用更改為:
.then(some_values => {
return axios({...})
.then(...)
})
應該做的伎倆。
或者,您可以簡單地刪除箭頭 function 中的大括號,以確保從 axios 調用產生的 promise 然后是 function 的返回值。這看起來像:
.then(some_values => axios({...})
.then(...))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.