回答編集履歴

1

読みやすく改善

2022/10/07 08:27

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -1,12 +1,18 @@
1
1
  公式ドキュメント読め案件です。
2
2
  参考サイト: [github.com/sidorares/node-mysql2](https://github.com/sidorares/node-mysql2)
3
+
4
+ ……だけで投げっぱなしにされると辛いと思うので、
5
+ 私と一緒に読み解いていきましょう。
6
+
7
+ ---
8
+
3
9
 
4
10
  > ```js
5
11
  > const [row1] = await connection.query(`select count(*) from accounts where email = '${req.body.email}'`);
6
12
  > ```
7
13
 
8
- 返り値を受け取って展開する箇所を`row1`という名称で宣言して
14
+ 質問文では返り値を受け取って展開する箇所を`row1`という名称で宣言して
9
- あたかも汎用オブジェクト(PHP等でいう連想配列)みたいな取り扱いをしていますが、
15
+ あたかも汎用オブジェクト(PHP等でいう連想配列)みたいな取り扱いをしています
10
16
 
11
17
  `connection.query`や`connection.execute`を`await`で受け取った結果は、
12
18
  0番目の要素が`rows`、1番目の要素が`fields`の配列です。
@@ -16,12 +22,23 @@
16
22
  > const [rows, fields] = await connection.execute('SELECT * FROM `table` WHERE `name` = ? AND `age` > ?', ['Morty', 14]);
17
23
  > ```
18
24
 
25
+ ダイレクトにrowsの結果が帰ってくるから`[row1]`で1行目にアクセス出来る前提のコードになっているのが勘違いなわけですが、
26
+ こういう書き方を指示した記事や教材なんかがあるかもしれないですね。
27
+
28
+ ライブラリ作った人間が用意しているドキュメントが一番正解に間違いなくて
29
+ Qiitaや個人ブログの記事や教材等は嘘が書いてある、もしくはバージョンが古くてそのうち嘘になるので、
30
+ 参考元のリンクが無いようなものは鵜呑みにしないよう注意してください。
31
+
19
32
  ---
20
33
 
21
34
  > この変数の型がなんなのかいまいちつかめてないです。
22
35
 
36
+ `row1`はオブジェクトの配列です。
37
+ 質問文のコードは配列の1要素目ではなく、`[rows, fields]`の配列から`rows`を抜き出してるだけなので。
38
+
23
- 以上の事から`row1`は配列です
39
+ 因みにrow1は配列ですが、
24
- row1の1番目の要素は[オブジェクト](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Object_initializer)です。
40
+ 0番目の要素は[オブジェクト](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Object_initializer)が入っているはずです。
41
+ [型表記](https://typescriptbook.jp/reference/values-types-variables/object/difference-among-object-and-object)は`Array<object>`とかになりそうです。
25
42
 
26
43
  [Array results](https://github.com/sidorares/node-mysql2#array-results)によるとこのような記述があります。
27
44
 
@@ -29,7 +46,7 @@
29
46
  > will be an array of arrays rather than an array of objects
30
47
 
31
48
  意訳: `rowsAsArray: true`を指定した場合、rowsは「オブジェクトの配列」ではなく「配列の配列」を返すようになります。
32
- 要するにオプションを指定しない場合、素のオブジェクトを返すと明示していす。
49
+ 要するにオプションを指定しない場合、オブジェクトの配列」を返すと明示しているわけで
33
50
 
34
51
  ---
35
52