回答編集履歴

1

ソースコードの気になった点を追記

2022/09/17 04:25

投稿

tamanegine
tamanegine

スコア177

test CHANGED
@@ -64,3 +64,74 @@
64
64
  Source: "sample@example",
65
65
  };
66
66
  ```
67
+
68
+ ---
69
+
70
+ また回答とは関係ない個人的なソースコードの指摘ですが、
71
+ - varとconstが混在しているので、基本的にはconstで再代入を行う場合はletで宣言し、varを使わないようにしたほうが良いです
72
+ - dynamo.queryをしているところでコールバック関数の結果をPromiseで返していますが、SESのように.promiseを使うとよいかと思います
73
+ `return dynamo.query(params).promise()`
74
+ - インデントがズレているので、フォーマットをかけるようにお願いします
75
+ - 単純なFor文を回して配列内のオブジェクトを取り出すループの場合は配列のmap関数を使うとキレイに書けるかと思います
76
+ - DynamoDBを使うときは`aws.DynamoDB()`ではなく`aws.DynamoDB.DocumentClient()`を使う方が扱いやすいデータになります
77
+
78
+ 以下例です
79
+ ```javascript
80
+ const aws = require('aws-sdk')
81
+ const dynamo = new aws.DynamoDB.DocumentClient()
82
+ const ses = new aws.SES({ region: "ap-northeast-1" })
83
+
84
+ exports.handler = async () => {
85
+ const prm = {
86
+ tablename: "sampledb",
87
+ pk_name: "SendLayer",
88
+ pk_prm: "To",
89
+ sk_name: "UserId",
90
+ sk_prm: "99999",
91
+ }
92
+ const res = await dynamoquery_pksk(prm)
93
+
94
+ // https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/map
95
+ const to_list = res.Items.map(item => item["UserAddress"])
96
+
97
+ // https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SES.html#sendEmail-property
98
+ const email_params = {
99
+ Destination: {
100
+ ToAddresses: to_list,
101
+ CcAddresses: []
102
+ },
103
+ Message: {
104
+ Body: {
105
+ Text: {
106
+ Data: "株式会社"
107
+ },
108
+ },
109
+
110
+ Subject: { Data: "発注願い" },
111
+ },
112
+ Source: "sample@example",
113
+ }
114
+ console.log(email_params)
115
+ return ses.sendEmail(email_params).promise()
116
+ }
117
+
118
+ function dynamoquery_pksk(obj) {
119
+ // https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html#query-property
120
+ const params = {
121
+ "TableName": obj.tablename,
122
+ "KeyConditionExpression": "#pk_name = :pk_prm and #sk_name < :sk_prm",
123
+ "ExpressionAttributeNames": {
124
+ "#pk_name": obj.pk_name,
125
+ "#sk_name": obj.sk_name
126
+ },
127
+ "ExpressionAttributeValues": {
128
+ ":pk_prm": obj.pk_prm,
129
+ ":sk_prm": obj.sk_prm,
130
+ }
131
+ }
132
+ return dynamo.query(params).promise()
133
+ }
134
+ ```
135
+
136
+ JavascriptやAWSの学習は大変かと思いますが頑張ってください
137
+