回答編集履歴

1

校正

2020/08/06 04:51

投稿

miyabi-sun
miyabi-sun

スコア21203

test CHANGED
@@ -4,9 +4,9 @@
4
4
 
5
5
  JavaScriptに於いて
6
6
 
7
- 値のお尻にある括弧`()`は関数呼び出しを意味します。
7
+ 値のお尻にある括弧`()`は関数呼び出しを意味します。
8
8
 
9
- これは値が関数である事が絶対で、関数なければエラーとなります。
9
+ これは値が関数である事が絶対で、関数なければエラーで落ちます。
10
10
 
11
11
 
12
12
 
@@ -36,7 +36,7 @@
36
36
 
37
37
  質問文と同じエラーになりましたね。
38
38
 
39
- とりあえず、この時点で`items.forEach`は関数ではない事がわかりました。
39
+ とりあえず`items.forEach`は関数ではない事がわかりました。
40
40
 
41
41
 
42
42
 
@@ -50,17 +50,15 @@
50
50
 
51
51
 
52
52
 
53
- `items.forEach`は`items`は`forEach`というプロパティを所持している(はず)
53
+ `items.forEach`は`items`は`forEach`というプロパティを所持しているはず
54
54
 
55
- じゃあこの`forEach`ってプロパティは何者やねん。
55
+ じゃあこの`forEach`プロパティは何者やねん。
56
56
 
57
57
  誰が決めてるの?
58
58
 
59
59
 
60
60
 
61
- これは途中のコードが端折られているため、
61
+ これは途中のコードが端折られているため正確なところは分かりませんが
62
-
63
- 正確なところはコードを全て眺めないことには分かりませんが、
64
62
 
65
63
  恐らくは配列のメソッドを指しているのでしょう。
66
64
 
@@ -76,7 +74,7 @@
76
74
 
77
75
 
78
76
 
79
- JavaScriptはデフォルトで配列ならば`map`や`forEach`等のプロパティを所持しています。
77
+ そしてJavaScriptは配列ならば`map`や`forEach`等のプロパティを所持しているという決りがあります。
80
78
 
81
79
  試しに確認してみましょう。
82
80
 
@@ -92,7 +90,7 @@
92
90
 
93
91
 
94
92
 
95
- 配列は`forEach`メソッドを所有している事が確認出来
93
+ 配列は`forEach`メソッドを所有している事が確認できした
96
94
 
97
95
  つまり`items`は`forEach`メソッドを所持していない。
98
96
 
@@ -100,7 +98,7 @@
100
98
 
101
99
 
102
100
 
103
- `items`ってんでしたっけ?
101
+ ejs内の`items`って何処から来たんでっけ?
104
102
 
105
103
  `res.render('index.ejs', {items:results});`で表現されていますね。
106
104
 
@@ -114,42 +112,62 @@
114
112
 
115
113
  この`results`がどこから来たのかも追ってみましょう。
116
114
 
117
- `const { Client } = require('pg')`というコードがあり、`node-postgres`を参照している事がわかります。
115
+ `const { Client } = require('pg')`というコードがあり、
116
+
117
+ npmモジュールの`node-postgres`を利用している事がわかります。
118
118
 
119
119
  [pg - npm](https://www.npmjs.com/package/pg)
120
120
 
121
121
 
122
122
 
123
- [⭐️ Documentation ⭐️](https://node-postgres.com/)からドキュメントへ飛び、`query`で検索
123
+ その中の[⭐️ Documentation ⭐️](https://node-postgres.com/)からドキュメントへ飛び
124
+
125
+ `query`で使い方を見てみましょう。
124
126
 
125
127
 
126
128
 
127
- ```js
129
+ > ```js
128
130
 
129
- client.query('SELECT $1::text as message', ['Hello world!'], (err, res) => {
131
+ > client.query('SELECT $1::text as message', ['Hello world!'], (err, res) => {
130
132
 
131
- console.log(err ? err.stack : res.rows[0].message) // Hello World!
133
+ > console.log(err ? err.stack : res.rows[0].message) // Hello World!
132
134
 
133
- client.end()
135
+ > client.end()
134
136
 
135
- })
137
+ > })
136
138
 
137
- ```
139
+ > ```
138
140
 
139
141
 
140
142
 
141
- これのコールバック関数の第引数で、
143
+ これのコールバック関数の第2引数で、
142
144
 
143
145
  `res.rows.0`という風にたどっている事がわかります。
144
146
 
145
147
 
146
148
 
147
- なので`results`は[汎用オブジェクト](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object)であって配列ではない。
149
+ `res`は[汎用オブジェクト](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object)
150
+
151
+ `res.rows`は添字でのプロパティ呼び出ししているので恐らく配列なんでしょうね。
148
152
 
149
153
 
150
154
 
151
- `results.rows`勘違いなんじゃないですか?
155
+ 質問文コードに戻って考えると、
152
156
 
153
- なので`items: results.rows`に変更すれば行けると思す。
157
+ `resuts`は汎用オブジェクトなので、`forEach`メソッドは所持してないはずです。
154
158
 
159
+ ここが誤り。
160
+
161
+
162
+
163
+ 結果を意味する`rows`プロパティにすれば良いんじゃないですかね?
164
+
165
+ `items: results.rows`に変更すれば少しは進むと思います。
166
+
167
+
168
+
169
+ 余談ですが、結果は複数形ではないですね。
170
+
171
+ DB問い合わせという1個の結果の`rows`という結果一覧表が配列、つまり複数形です。
172
+
155
- 結果は配列ではない、つまり複数形ではないので、resultという風に単数形の引数名に変更したほうが良いかもれませんね。
173
+ resultという風に単数形の引数名に変更したほうが良いょうね。