回答編集履歴
1
校正
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
|
-
とりあえず
|
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は
|
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')`というコードがあり、
|
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/)からドキュメントへ飛び
|
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
|
-
|
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
|
-
|
155
|
+
質問文のコードに戻って考えると、
|
152
156
|
|
153
|
-
|
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
|
-
|
173
|
+
resultという風に単数形の引数名に変更したほうが良いでしょうね。
|