回答編集履歴

2

余計な部分を削除

2018/02/05 17:10

投稿

退会済みユーザー
test CHANGED
@@ -4,21 +4,21 @@
4
4
 
5
5
 
6
6
 
7
- いいえ。JSON.parseしようとしたevent.bodyがundefinedであった可能性が高いです。例えば以下のようなコードで同様のエラーが得られます。
7
+ いいえ。JSON.parseしようとしたevent.bodyがundefinedった可能性が高いです。例えば以下のコードで同様のエラーが得られます。
8
8
 
9
9
 
10
10
 
11
11
  ```javascript
12
12
 
13
- const data = {foo: '123'};
13
+ const data = {};
14
14
 
15
- JSON.parse(data.bar);
15
+ JSON.parse(data.foo);
16
16
 
17
17
  ```
18
18
 
19
19
 
20
20
 
21
- JSON.parseは文字列を解析してからJavaScript値を生成しますので、先頭が`{`なら「Objectかな…」`[`なら「Arrayかな…」、`1`なら「Numberかな…」、のように解析できますが、`undefined`だと「先頭uなの!?」となって、結局
21
+ JSON.parseは渡されたJSONの文字列の先頭が`{`なら「Objectかな…」`[`なら「Arrayかな…」、`1`なら「Numberかな…」、解析できますが、`undefined`だと「先頭uなの!?」となって、結局
22
22
 
23
23
 
24
24
 
@@ -34,11 +34,11 @@
34
34
 
35
35
 
36
36
 
37
- エラーをもう少し見ると、どこで止まったかが書いてあります。
37
+ エラーを先まで見ると、どこで止まったかが書いてあります。
38
38
 
39
39
  ![イメージ説明](6665df5a58de1123771060bf5a8dd240.png)
40
40
 
41
- スクリプトの29行目の29文字目でエラーになったうです。なので、スクリプトの29行目を確認しましょう。
41
+ スクリプトの29行目の29文字目でエラーになったうです。スクリプトの29行目を確認しましょう。
42
42
 
43
43
  ```javascript
44
44
 
@@ -48,13 +48,13 @@
48
48
 
49
49
  ```
50
50
 
51
- ちょうど`JSON.parse`のところだと分かります。ということおそらく`event.body`が変で、正しくJSONの文字列が渡なかったのかな、と予想できます。なので、原因を調べるために、以下のように変更して、もう一度テストしてみてください。困ったときは、とりあえずおかしい行の前で`console.log`すれば、たいていの問題は原因がわかります。
51
+ `JSON.parse`のところだと分かります。このこから、`event.body`が変で、JSONの文字列が渡なかったのかな、と予想できます。なので、原因を調べるために、以下のように1行追加して、もう一度テストしてみてください。困ったときは、おかしい行の前で`console.log`すれば、たいていの問題は原因がわかります。
52
52
 
53
53
  ```
54
54
 
55
55
  // メッセージの編集
56
56
 
57
- console.log(event);
57
+ console.log(event); // 追加
58
58
 
59
59
  const parameters = JSON.parse(event.body).result.parameters;
60
60
 
@@ -62,7 +62,7 @@
62
62
 
63
63
 
64
64
 
65
- 今回の場合、API Gatewayからのアクセス、つまり、HTTPのリクエストがトリガーとなります。このときのeventオブジェクトは、HTTPのヘッダの情報やアクセス元の情報が入っていて、Lambdaのコンソールからテストしたときのような、単純な構造にはなっていません。
65
+ 今回の場合、API Gatewayからのアクセス、つまり、HTTPのリクエストがトリガーとなります。このときのeventオブジェクトは、HTTPのヘッダの情報やアクセス元の情報が入っていて、Lambdaのコンソールからテストしたときのような、単純な構造にはなっていません。
66
66
 
67
67
 
68
68
 
@@ -88,7 +88,9 @@
88
88
 
89
89
 
90
90
 
91
+ ここが問題なければ、AWSLambda → Slackは問題ありません。
92
+
91
- ここで問題がなければ、AWSLambda → Slackは問題ありません。なので、次はAPIGatewayのコンソールからAPIGateway → AWSLambdaをテストしましょう。
93
+ 次はAPIGatewayのコンソールからAPIGateway → AWSLambdaをテストしましょう。
92
94
 
93
95
 
94
96
 
@@ -100,4 +102,6 @@
100
102
 
101
103
 
102
104
 
105
+ ここが問題なければ、APIGateway → AWSLambdaも問題ありません。
106
+
103
- ここで問題がなければ、APIGateway → AWSLambdaも問題ありません。なので、次はDialogflow → APIGatewayを確認することになりますが、長くなったので回答はここまでとします。
107
+ 次はDialogflow → APIGatewayを確認することになりますが、長くなったので回答はここまでとします。

1

エラー本文の説明を追加しました

2018/02/05 17:09

投稿

退会済みユーザー
test CHANGED
@@ -1,8 +1,44 @@
1
+ > SyntaxError: Unexpected token u in JSON at position 0
2
+
3
+ > コールバックと引数が一致していない?のでしょうか
4
+
5
+
6
+
7
+ いいえ。JSON.parseしようとしたevent.bodyがundefinedであった可能性が高いです。例えば以下のようなコードで同様のエラーが得られます。
8
+
9
+
10
+
11
+ ```javascript
12
+
13
+ const data = {foo: '123'};
14
+
15
+ JSON.parse(data.bar);
16
+
17
+ ```
18
+
19
+
20
+
21
+ JSON.parseは文字列を解析してからJavaScriptの値を生成しますので、先頭が`{`なら「Objectかな…」`[`なら「Arrayかな…」、`1`なら「Numberかな…」、のように解析できますが、`undefined`だと「先頭uなの!?」となって、結局
22
+
23
+
24
+
25
+ ```
26
+
27
+ SyntaxError: Unexpected token u in JSON at position 0
28
+
29
+ ```
30
+
31
+
32
+
1
- まず、エラーをよく見しょう
33
+ エラーを出して止ります
34
+
35
+
36
+
37
+ エラーをもう少し見ると、どこで止まったかが書いてあります。
2
38
 
3
39
  ![イメージ説明](6665df5a58de1123771060bf5a8dd240.png)
4
40
 
5
- スクリプトの29行目の29文字目でエラーになったと書いてあります。なので、スクリプトの29行目を確認しましょう。
41
+ スクリプトの29行目の29文字目でエラーになったそうです。なので、スクリプトの29行目を確認しましょう。
6
42
 
7
43
  ```javascript
8
44