質問編集履歴

21

誤植の修正

2023/12/06 11:57

投稿

kanon_2155103
kanon_2155103

スコア7

test CHANGED
File without changes
test CHANGED
@@ -286,8 +286,8 @@
286
286
  こちらの投稿にて同時に質問していた「PostgreSQLの生成列でTo_charを使いたい」という問題は、本題がふたつ存在したことで分かり辛くなってしまったため、別の投稿に移動いたしました。
287
287
  https://teratail.com/questions/5xbktfa8l5dr0f
288
288
 
289
- また、こちらの投稿ででいただいたアドバイス試したところ、出力結果に進歩が見られましたので、別の投稿に移動することになりました。続きはこちらをご覧いただければと思います。
289
+ また、こちらの投稿ででいただいたアドバイス試してみたところ、出力結果に進歩が見られましたので、別の投稿に移動することになりました。続きはこちらをご覧いただければと思います。
290
- https://teratail.com/questions/6zqnuiwft1zlkp
290
+ https://teratail.com/questions/2k3v2jas7rn82h
291
291
 
292
292
  お付き合いいただいている皆様にはご不便をおかけしてしまい、誠に申し訳ございません。
293
293
 

20

情報の更新

2023/12/06 11:55

投稿

kanon_2155103
kanon_2155103

スコア7

test CHANGED
File without changes
test CHANGED
@@ -286,5 +286,8 @@
286
286
  こちらの投稿にて同時に質問していた「PostgreSQLの生成列でTo_charを使いたい」という問題は、本題がふたつ存在したことで分かり辛くなってしまったため、別の投稿に移動いたしました。
287
287
  https://teratail.com/questions/5xbktfa8l5dr0f
288
288
 
289
+ また、こちらの投稿ででいただいたアドバイス試したところ、出力結果に進歩が見られましたので、別の投稿に移動することになりました。続きはこちらをご覧いただければと思います。
290
+ https://teratail.com/questions/6zqnuiwft1zlkp
291
+
289
292
  お付き合いいただいている皆様にはご不便をおかけしてしまい、誠に申し訳ございません。
290
293
 

19

質問を以前の状態に戻しました

2023/12/04 15:03

投稿

kanon_2155103
kanon_2155103

スコア7

test CHANGED
File without changes
test CHANGED
@@ -5,30 +5,124 @@
5
5
  それに伴い、お尋ねしたい問題がございます。
6
6
 
7
7
  ### PostgreSQLと既存のコードが噛み合わない
8
- 移行にあたり必要なコードの書き換えなどは一通り終えたつもりなのですが、実行してみたところ、EJSファイルに次のようなエラーが発生してしまい、接続が切れてしいました(EJSというのは、HTML内にJavascriptを簡単に記述できるJSのテンプレートエンジンです)。
9
-
10
- ```app.jsの実行結果(更新しました)
11
- Listeninng on 8001 // 1行目: 実行時にconsole.infoで出力されるテキスト
12
- [ // 2~12行目: 実行後、初めて/indexもしくは/trashにアクセスした際にconsole.logで出力されるdata.rowsの内容(中身は/indexのもの)
13
- {
14
- id: 1,
15
- title: 'mikan',
16
- content: 'choco',
17
- created: 2023-12-01T07:16:14.517Z,
18
- modified: 2023-12-01T07:18:47.483Z,
19
- is_removed: false,
20
- is_locked: false
21
- }
22
- ]
23
- C:\Users\Kanon\workspace\memo-app\app.js:79
24
- console.log(data.rows);
25
- ^
26
-
27
- TypeError: Cannot read properties of undefined (reading 'rows')
28
- at Query.callback (C:\Users\Kanon\workspace\memo-app\app-new.js:79:21)
29
- at Query.handleError (C:\Users\Kanon\workspace\memo-app\node_modules\pg\lib\query.js:128:19)
30
- at C:\Users\Kanon\workspace\memo-app\node_modules\pg\lib\client.js:580:15
31
- at processTicksAndRejections (node:internal/process/task_queues:78:11) // 13行目~: 最初にアクセスしたページから別のページに飛ぼうとすると起こるエラー
8
+ 移行にあたり必要なコードの書き換えなどは一通り終えたつもりなのですが、実行してみたところ、EJSファイルに次のようなエラーが発生してしまいました(EJSというのは、HTML内にJavascriptを簡単に記述できるJSのテンプレートエンジンです)。
9
+
10
+ ```app.jsの実行結果
11
+ Listeninng on 8001
12
+ Result {
13
+ command: 'SELECT',
14
+ rowCount: 1,
15
+ oid: null,
16
+ rows: [
17
+ {
18
+ id: 1,
19
+ title: 'mikan',
20
+ content: 'choco',
21
+ created: 2023-12-01T07:16:14.517Z,
22
+ modified: 2023-12-01T07:18:47.483Z,
23
+ is_removed: false,
24
+ is_locked: false
25
+ }
26
+ ],
27
+ fields: [
28
+ Field {
29
+ name: 'id',
30
+ tableID: 16399,
31
+ columnID: 1,
32
+ dataTypeID: 23,
33
+ dataTypeSize: 4,
34
+ dataTypeModifier: -1,
35
+ format: 'text'
36
+ },
37
+ Field {
38
+ name: 'title',
39
+ tableID: 16399,
40
+ columnID: 2,
41
+ dataTypeID: 1043,
42
+ dataTypeSize: -1,
43
+ dataTypeModifier: 44,
44
+ format: 'text'
45
+ },
46
+ Field {
47
+ name: 'content',
48
+ tableID: 16399,
49
+ columnID: 3,
50
+ dataTypeID: 1043,
51
+ dataTypeSize: -1,
52
+ dataTypeModifier: 10485764,
53
+ format: 'text'
54
+ },
55
+ Field {
56
+ name: 'created',
57
+ tableID: 16399,
58
+ columnID: 4,
59
+ dataTypeID: 1114,
60
+ dataTypeSize: 8,
61
+ dataTypeModifier: -1,
62
+ format: 'text'
63
+ },
64
+ Field {
65
+ name: 'modified',
66
+ tableID: 16399,
67
+ columnID: 5,
68
+ dataTypeID: 1114,
69
+ dataTypeSize: 8,
70
+ dataTypeModifier: -1,
71
+ format: 'text'
72
+ },
73
+ Field {
74
+ name: 'is_removed',
75
+ tableID: 16399,
76
+ columnID: 6,
77
+ dataTypeID: 16,
78
+ dataTypeSize: 1,
79
+ dataTypeModifier: -1,
80
+ format: 'text'
81
+ },
82
+ Field {
83
+ name: 'is_locked',
84
+ tableID: 16399,
85
+ columnID: 7,
86
+ dataTypeID: 16,
87
+ dataTypeSize: 1,
88
+ dataTypeModifier: -1,
89
+ format: 'text'
90
+ }
91
+ ],
92
+ _parsers: [
93
+ [Function: parseInteger],
94
+ [Function: noParse],
95
+ [Function: noParse],
96
+ [Function: parseDate],
97
+ [Function: parseDate],
98
+ [Function: parseBool],
99
+ [Function: parseBool]
100
+ ],
101
+ _types: TypeOverrides {
102
+ _types: {
103
+ getTypeParser: [Function: getTypeParser],
104
+ setTypeParser: [Function: setTypeParser],
105
+ arrayParser: [Object],
106
+ builtins: [Object]
107
+ RowCtor: null,
108
+ rowAsArray: false,
109
+ _prebuiltEmptyResultObject: {
110
+ >> 31| <% memos.forEach((memo) => { %>
111
+ 32| <li>
112
+ 33| <span class="title-column"><%= memo.title %></span>
113
+ 34| <div class="items">
114
+
115
+ memos.forEach is not a function
116
+ at eval ("C:\\Users\\Kanon\\workspace\\memo-app\\views\\index.ejs":15:14)
117
+ at index (C:\Users\Kanon\workspace\memo-app\node_modules\ejs\lib\ejs.js:703:17)
118
+ at tryHandleCache (C:\Users\Kanon\workspace\memo-app\node_modules\ejs\lib\ejs.js:274:36)
119
+ at View.exports.renderFile [as engine] (C:\Users\Kanon\workspace\memo-app\node_modules\ejs\lib\ejs.js:491:10)
120
+ at View.render (C:\Users\Kanon\workspace\memo-app\node_modules\express\lib\view.js:135:8)
121
+ at tryRender (C:\Users\Kanon\workspace\memo-app\node_modules\express\lib\application.js:657:10)
122
+ at Function.render (C:\Users\Kanon\workspace\memo-app\node_modules\express\lib\application.js:609:3)
123
+ at ServerResponse.render (C:\Users\Kanon\workspace\memo-app\node_modules\express\lib\response.js:1039:7)
124
+ at Query.<anonymous> (C:\Users\Kanon\workspace\memo-app\app-new.js:20:8)
125
+ at Query.handleReadyForQuery (C:\Users\Kanon\workspace\memo-app\node_modules\pg\lib\query.js:139:14)
32
126
  ```
33
127
 
34
128
  まだPosrgreSQLに不慣れなため、おそらく書き換えの際に書式の間違いや誤字が発生したのだと思いますが、自力ではこれ以上見つけることができず……。
@@ -55,7 +149,7 @@
55
149
  update_tri BEFORE UPDATE ON memos FOR EACH ROW EXECUTE FUNCTION set_update_time()
56
150
  ```
57
151
 
58
- ```MySQL(isRemovedをis_removedに、isLockedをis_lockedに改名しました)
152
+ ```MySQL
59
153
  mysql> desc memos;
60
154
  +----------------+----------------+------+-----+-------------------+-----------------------------------------------+
61
155
  | Field | Type | Null | Key | Default | Extra |
@@ -71,21 +165,16 @@
71
165
  +----------------+----------------+------+-----+-------------------+-----------------------------------------------+
72
166
  8 rows in set (0.05 sec)
73
167
  ```
74
-
168
+ _イタリックテキスト_
75
169
  また、該当のJSファイルとEJSファイルはこちらです。
76
170
 
77
- ```app.js(更新しました
171
+ ```app.js(/indexと周辺のみ
78
172
  const express = require('express');
79
173
  const mod = require('./module')
80
174
  const app = express();
81
175
 
82
176
  app.use(express.static('public'));
83
177
  app.use(express.urlencoded({extended: false}));
84
-
85
- // ルートURLへのアクセスがあった際に/indexにリダイレクトする
86
- app.get('/', (req, res) => {
87
- res.redirect('/index');
88
- });
89
178
 
90
179
  // Memo Listの取得
91
180
  app.get('/index', (req, res) => {
@@ -98,123 +187,6 @@
98
187
  connection.end();
99
188
  }
100
189
  );
101
- });
102
-
103
- // 新規メモの作成ページを表示
104
- app.get('/new', (req, res) => {
105
- res.render('new.ejs');
106
- });
107
-
108
- // 新規メモを保存
109
- app.post('/create', (req, res) => {
110
- const connection = mod.connection;
111
- connection.query(
112
- 'INSERT INTO memos (title, content) VALUES (?, ?)',
113
- [req.body.memoTitle, req.body.memoContent],
114
- (err, data) => {
115
- res.redirect('/index');
116
- connection.end();
117
- }
118
- );
119
- });
120
-
121
- // メモの編集ページを取得
122
- app.get('/edit/:id', (req, res) => {
123
- const connection = mod.connection;
124
- connection.query(
125
- 'SELECT * FROM memos WHERE id = ?',
126
- [req.params.id],
127
- (err, data) => {
128
- res.render('edit.ejs', {memo: data.rows[0]});
129
- connection.end();
130
- }
131
- );
132
- });
133
-
134
- // メモを更新
135
- app.post('/update/:id', (req, res) => {
136
- const connection = mod.connection;
137
- connection.query(
138
- 'UPDATE memos SET title = ?, content= ? WHERE id = ?',
139
- [req.body.memoTitle, req.body.memoContent, req.params.id],
140
- (err, data) => {
141
- res.redirect('/index');
142
- connection.end();
143
- }
144
- );
145
- });
146
-
147
- // Trash Listの取得
148
- app.get('/trash', (req, res) => {
149
- const connection = mod.connection;
150
- connection.query(
151
- 'SELECT * FROM memos WHERE is_removed = true',
152
- (err, data) => {
153
- console.log(data.rows);
154
- res.render('trash.ejs', {memos: data.rows});
155
- connection.end();
156
- }
157
- );
158
- });
159
-
160
- // メモを/indexから/trashへ
161
- app.post('/remove/:id', (req, res) => {
162
- const connection = mod.connection;
163
- const id = req.params.id;
164
- connection.query(
165
- 'UPDATE memos SET is_removed = true WHERE id = ?',
166
- [id],
167
- (err, data) => {
168
- res.redirect('/index');
169
- connection.end();
170
- }
171
- );
172
- });
173
-
174
- // メモを/trashから/indexへ
175
- app.post('/restore/:id', (req, res) => {
176
- const connection = mod.connection;
177
- const id = req.params.id;
178
- connection.query(
179
- 'UPDATE memos SET is_removed = false WHERE id = ?',
180
- [id],
181
- (err, data) => {
182
- res.redirect('/trash');
183
- connection.end();
184
- }
185
- );
186
- });
187
-
188
- // /trashからメモを完全削除
189
- app.post('/delete/:id', (req, res) => {
190
- const connection = mod.connection;
191
- const id = req.params.id;
192
- connection.query(
193
- 'DELETE FROM memos WHERE id = ?',
194
- [id],
195
- (err, data) => {
196
- res.redirect('/trash');
197
- connection.end();
198
- }
199
- );
200
- });
201
-
202
- // Trash Listを空にする
203
- app.post('/empty', (req, res) => {
204
- const connection = mod.connection;
205
- connection.query(
206
- 'DELETE FROM memos WHERE is_removed = true',
207
- (err, data) => {
208
- res.redirect('/trash');
209
- connection.end();
210
- }
211
- );
212
- });
213
-
214
- const port = process.env.PORT || 8001;
215
-
216
- app.listen(port, () => {
217
- console.info(`Listeninng on ${port}`);
218
190
  });
219
191
  ```
220
192
 

18

書式の改善

2023/12/03 16:17

投稿

kanon_2155103
kanon_2155103

スコア7

test CHANGED
File without changes
test CHANGED
@@ -5,7 +5,7 @@
5
5
  それに伴い、お尋ねしたい問題がございます。
6
6
 
7
7
  ### PostgreSQLと既存のコードが噛み合わない
8
- 移行にあたり必要なコードの書き換えなどは一通り終えたつもりなのですが、実行してみたところ、EJSファイルに次のようなエラーが発生しました(EJSというのは、HTML内にJavascriptを簡単に記述できるJSのテンプレートエンジンです)。
8
+ 移行にあたり必要なコードの書き換えなどは一通り終えたつもりなのですが、実行してみたところ、EJSファイルに次のようなエラーが発生してしい、接続が切れてまいました(EJSというのは、HTML内にJavascriptを簡単に記述できるJSのテンプレートエンジンです)。
9
9
 
10
10
  ```app.jsの実行結果(更新しました)
11
11
  Listeninng on 8001 // 1行目: 実行時にconsole.infoで出力されるテキスト

17

書式の改善

2023/12/03 16:10

投稿

kanon_2155103
kanon_2155103

スコア7

test CHANGED
File without changes
test CHANGED
@@ -35,7 +35,7 @@
35
35
  どうか皆様のお知恵をお貸しくださいませ。
36
36
 
37
37
  ### 該当のソースコード・テーブル
38
- 以下のひとつめが新しく作ったPostgreSQLのmemosテーブルの構造、2枚目が以前から存在したMySQLのmemosテーブルの構造です。
38
+ 以下のひとつめが新しく作ったPostgreSQLのmemosテーブルの構造、ふたつめが以前から存在したMySQLのmemosテーブルの構造です。
39
39
 
40
40
  ```PostgreSQL
41
41
  memo_app=# \d memos;

16

書式の改善

2023/12/03 16:09

投稿

kanon_2155103
kanon_2155103

スコア7

test CHANGED
File without changes
test CHANGED
@@ -311,7 +311,7 @@
311
311
  どうぞよろしくお願いいたします。
312
312
 
313
313
  ### 追記
314
- こちらの投稿にて同時に記載していた「PostgreSQLの生成列でTo_charを使いたい」という問は、本題がふたつ存在したために分かり辛くなってしまったため、別の投稿に移動いたしました。
314
+ こちらの投稿にて同時に質問していた「PostgreSQLの生成列でTo_charを使いたい」という問は、本題がふたつ存在したことで分かり辛くなってしまったため、別の投稿に移動いたしました。
315
315
  https://teratail.com/questions/5xbktfa8l5dr0f
316
316
 
317
317
  お付き合いいただいている皆様にはご不便をおかけしてしまい、誠に申し訳ございません。

15

書式の改善

2023/12/03 16:06

投稿

kanon_2155103
kanon_2155103

スコア7

test CHANGED
File without changes
test CHANGED
@@ -312,5 +312,7 @@
312
312
 
313
313
  ### 追記
314
314
  こちらの投稿にて同時に記載していた「PostgreSQLの生成列でTo_charを使いたい」という質問は、本題がふたつ存在したために分かり辛くなってしまったため、別の投稿に移動いたしました。
315
+ https://teratail.com/questions/5xbktfa8l5dr0f
316
+
315
317
  お付き合いいただいている皆様にはご不便をおかけしてしまい、誠に申し訳ございません。
316
318
 

14

書式の改善

2023/12/03 16:05

投稿

kanon_2155103
kanon_2155103

スコア7

test CHANGED
File without changes
test CHANGED
@@ -4,7 +4,7 @@
4
4
  Node.jsで書かれたメモアプリで、以前はMySQLを接続していたのですが、この度PostgreSQLに移行することになりました。
5
5
  それに伴い、お尋ねしたい問題がございます。
6
6
 
7
- ### ひとつめ・PostgreSQLと既存のコードが噛み合わない
7
+ ### PostgreSQLと既存のコードが噛み合わない
8
8
  移行にあたり必要なコードの書き換えなどは一通り終えたつもりなのですが、実行してみたところ、EJSファイルに次のようなエラーが発生しました(EJSというのは、HTML内にJavascriptを簡単に記述できるJSのテンプレートエンジンです)。
9
9
 
10
10
  ```app.jsの実行結果(更新しました)

13

書式の改善

2023/12/03 15:04

投稿

kanon_2155103
kanon_2155103

スコア7

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,7 @@
2
2
  お世話になります。
3
3
 
4
4
  Node.jsで書かれたメモアプリで、以前はMySQLを接続していたのですが、この度PostgreSQLに移行することになりました。
5
- それに伴い、お尋ねしたい問題がふたつございます。
5
+ それに伴い、お尋ねしたい問題がございます。
6
6
 
7
7
  ### ひとつめ・PostgreSQLと既存のコードが噛み合わない
8
8
  移行にあたり必要なコードの書き換えなどは一通り終えたつもりなのですが、実行してみたところ、EJSファイルに次のようなエラーが発生しました(EJSというのは、HTML内にJavascriptを簡単に記述できるJSのテンプレートエンジンです)。
@@ -34,25 +34,6 @@
34
34
  まだPosrgreSQLに不慣れなため、おそらく書き換えの際に書式の間違いや誤字が発生したのだと思いますが、自力ではこれ以上見つけることができず……。
35
35
  どうか皆様のお知恵をお貸しくださいませ。
36
36
 
37
- ### ふたつめ・PostgreSQLの生成列でTo_charを使いたい
38
- 従来のMySQLでは、以下のように定義したカラムが存在します。
39
- ```MySQL
40
- ALTER TABLE テーブル名 ADD カラム名 VARCHAR(15) DEFAULT GENERATED ALWAYS AS (DATE_FORMAT(参照カラム名, '%b %d %y %k:%i')) STORED;
41
- ```
42
- PostgreSQLでもこれと同様に機能するカラムを作りたいのですが、自分なりに調べて以下のように定義してみてもうまくいきませんでした。
43
-
44
- ```PostgreSQLで試したコマンドとそのエラー
45
- // 実行コマンド
46
- ALTER TABLE テーブル名 ADD カラム名 VARCHAR(15) DEFAULT GENERATED ALWAYS AS IDENTITY (To_char(参照カラム名, 'Mon DD YY HH24:MI'));
47
-
48
- // エラー文
49
- ERROR: "ALWAYS"またはその近辺で構文エラー
50
- 行 1: ...ブル名 ADD カラム名 VARCHAR(15) DEFAULT GENERATED ALWAYS AS ...
51
- ```
52
-
53
- To-charの生成列での使い方を検索してみたのですが、SELECT文での使用例しか見つけることができずに行き詰まっております。
54
- こちらについても、よい解決法をご教示いただけますと幸いです。
55
-
56
37
  ### 該当のソースコード・テーブル
57
38
  以下のひとつめが新しく作ったPostgreSQLのmemosテーブルの構造、2枚目が以前から存在したMySQLのmemosテーブルの構造です。
58
39
 
@@ -74,21 +55,21 @@
74
55
  update_tri BEFORE UPDATE ON memos FOR EACH ROW EXECUTE FUNCTION set_update_time()
75
56
  ```
76
57
 
77
- ```MySQL
58
+ ```MySQL(isRemovedをis_removedに、isLockedをis_lockedに改名しました)
78
59
  mysql> desc memos;
79
- +---------------+----------------+------+-----+-------------------+-----------------------------------------------+
60
+ +----------------+----------------+------+-----+-------------------+-----------------------------------------------+
80
- | Field | Type | Null | Key | Default | Extra |
61
+ | Field | Type | Null | Key | Default | Extra |
81
- +---------------+----------------+------+-----+-------------------+-----------------------------------------------+
62
+ +----------------+----------------+------+-----+-------------------+-----------------------------------------------+
82
- | id | int | NO | PRI | NULL | auto_increment |
63
+ | id | int | NO | PRI | NULL | auto_increment |
83
- | title | varchar(40) | YES | | Untitled | |
64
+ | title | varchar(40) | YES | | Untitled | |
84
- | content | varchar(16383) | YES | | NULL | |
65
+ | content | varchar(16383) | YES | | NULL | |
85
- | created | timestamp | YES | | CURRENT_TIMESTAMP | DEFAULT_GENERATED |
66
+ | created | timestamp | YES | | CURRENT_TIMESTAMP | DEFAULT_GENERATED |
86
- | last_modified | datetime | YES | | CURRENT_TIMESTAMP | DEFAULT_GENERATED on update CURRENT_TIMESTAMP |
67
+ | modified | datetime | YES | | CURRENT_TIMESTAMP | DEFAULT_GENERATED on update CURRENT_TIMESTAMP |
87
- | modified | varchar(15) | YES | | NULL | STORED GENERATED |
68
+ | modified_stamp | varchar(15) | YES | | NULL | STORED GENERATED |
69
+ | is_removed | tinyint(1) | NO | | 0 | |
88
- | isLocked | tinyint(1) | NO | | 0 | |
70
+ | is_locked | tinyint(1) | NO | | 0 | |
89
- | isRemoved | tinyint(1) | NO | | 0 | |
90
- +---------------+----------------+------+-----+-------------------+-----------------------------------------------+
71
+ +----------------+----------------+------+-----+-------------------+-----------------------------------------------+
91
- 8 rows in set (0.03 sec)
72
+ 8 rows in set (0.05 sec)
92
73
  ```
93
74
 
94
75
  また、該当のJSファイルとEJSファイルはこちらです。
@@ -329,3 +310,7 @@
329
310
 
330
311
  どうぞよろしくお願いいたします。
331
312
 
313
+ ### 追記
314
+ こちらの投稿にて同時に記載していた「PostgreSQLの生成列でTo_charを使いたい」という質問は、本題がふたつ存在したために分かり辛くなってしまったため、別の投稿に移動いたしました。
315
+ お付き合いいただいている皆様にはご不便をおかけしてしまい、誠に申し訳ございません。
316
+

12

情報の更新

2023/12/03 13:30

投稿

kanon_2155103
kanon_2155103

スコア7

test CHANGED
File without changes
test CHANGED
@@ -8,8 +8,8 @@
8
8
  移行にあたり必要なコードの書き換えなどは一通り終えたつもりなのですが、実行してみたところ、EJSファイルに次のようなエラーが発生しました(EJSというのは、HTML内にJavascriptを簡単に記述できるJSのテンプレートエンジンです)。
9
9
 
10
10
  ```app.jsの実行結果(更新しました)
11
- Listeninng on 8001
12
- [ // 2~12行目: 実行後、初めて/index もしくは
11
+ Listeninng on 8001 // 1行目: 実行時にconsole.infoで出力されるテキスト
12
+ [ // 2~12行目: 実行後、初めて/indexもしくは/trashにアクセスした際にconsole.logで出力されるdata.rowsの内容(中身は/indexのもの)
13
13
  {
14
14
  id: 1,
15
15
  title: 'mikan',
@@ -28,11 +28,8 @@
28
28
  at Query.callback (C:\Users\Kanon\workspace\memo-app\app-new.js:79:21)
29
29
  at Query.handleError (C:\Users\Kanon\workspace\memo-app\node_modules\pg\lib\query.js:128:19)
30
30
  at C:\Users\Kanon\workspace\memo-app\node_modules\pg\lib\client.js:580:15
31
- at processTicksAndRejections (node:internal/process/task_queues:78:11)
31
+ at processTicksAndRejections (node:internal/process/task_queues:78:11) // 13行目~: 最初にアクセスしたページから別のページに飛ぼうとすると起こるエラー
32
- ```
32
+ ```
33
-
34
- 実行結果はconsole.logで出力したmemosテーブルの情報とエラーメッセージで構成されています。
35
- また、どうやらnode app.jsコマンドでアプリを起動した際ではなく、Localhost8001にアクセスした時にエラーが起こっているようです。
36
33
 
37
34
  まだPosrgreSQLに不慣れなため、おそらく書き換えの際に書式の間違いや誤字が発生したのだと思いますが、自力ではこれ以上見つけることができず……。
38
35
  どうか皆様のお知恵をお貸しくださいませ。
@@ -96,7 +93,7 @@
96
93
 
97
94
  また、該当のJSファイルとEJSファイルはこちらです。
98
95
 
99
- ```app.jsの/index周辺情報
96
+ ```app.js(更新しました)
100
97
  const express = require('express');
101
98
  const mod = require('./module')
102
99
  const app = express();
@@ -104,17 +101,139 @@
104
101
  app.use(express.static('public'));
105
102
  app.use(express.urlencoded({extended: false}));
106
103
 
104
+ // ルートURLへのアクセスがあった際に/indexにリダイレクトする
105
+ app.get('/', (req, res) => {
106
+ res.redirect('/index');
107
+ });
108
+
107
109
  // Memo Listの取得
108
110
  app.get('/index', (req, res) => {
109
111
  const connection = mod.connection;
110
112
  connection.query(
111
113
  'SELECT * FROM memos WHERE is_removed = false',
112
114
  (err, data) => {
113
- console.log(data);
115
+ console.log(data.rows);
114
- res.render('index.ejs', {memos: data});
116
+ res.render('index.ejs', {memos: data.rows});
115
- connection.end();
117
+ connection.end();
116
- }
118
+ }
117
- );
119
+ );
120
+ });
121
+
122
+ // 新規メモの作成ページを表示
123
+ app.get('/new', (req, res) => {
124
+ res.render('new.ejs');
125
+ });
126
+
127
+ // 新規メモを保存
128
+ app.post('/create', (req, res) => {
129
+ const connection = mod.connection;
130
+ connection.query(
131
+ 'INSERT INTO memos (title, content) VALUES (?, ?)',
132
+ [req.body.memoTitle, req.body.memoContent],
133
+ (err, data) => {
134
+ res.redirect('/index');
135
+ connection.end();
136
+ }
137
+ );
138
+ });
139
+
140
+ // メモの編集ページを取得
141
+ app.get('/edit/:id', (req, res) => {
142
+ const connection = mod.connection;
143
+ connection.query(
144
+ 'SELECT * FROM memos WHERE id = ?',
145
+ [req.params.id],
146
+ (err, data) => {
147
+ res.render('edit.ejs', {memo: data.rows[0]});
148
+ connection.end();
149
+ }
150
+ );
151
+ });
152
+
153
+ // メモを更新
154
+ app.post('/update/:id', (req, res) => {
155
+ const connection = mod.connection;
156
+ connection.query(
157
+ 'UPDATE memos SET title = ?, content= ? WHERE id = ?',
158
+ [req.body.memoTitle, req.body.memoContent, req.params.id],
159
+ (err, data) => {
160
+ res.redirect('/index');
161
+ connection.end();
162
+ }
163
+ );
164
+ });
165
+
166
+ // Trash Listの取得
167
+ app.get('/trash', (req, res) => {
168
+ const connection = mod.connection;
169
+ connection.query(
170
+ 'SELECT * FROM memos WHERE is_removed = true',
171
+ (err, data) => {
172
+ console.log(data.rows);
173
+ res.render('trash.ejs', {memos: data.rows});
174
+ connection.end();
175
+ }
176
+ );
177
+ });
178
+
179
+ // メモを/indexから/trashへ
180
+ app.post('/remove/:id', (req, res) => {
181
+ const connection = mod.connection;
182
+ const id = req.params.id;
183
+ connection.query(
184
+ 'UPDATE memos SET is_removed = true WHERE id = ?',
185
+ [id],
186
+ (err, data) => {
187
+ res.redirect('/index');
188
+ connection.end();
189
+ }
190
+ );
191
+ });
192
+
193
+ // メモを/trashから/indexへ
194
+ app.post('/restore/:id', (req, res) => {
195
+ const connection = mod.connection;
196
+ const id = req.params.id;
197
+ connection.query(
198
+ 'UPDATE memos SET is_removed = false WHERE id = ?',
199
+ [id],
200
+ (err, data) => {
201
+ res.redirect('/trash');
202
+ connection.end();
203
+ }
204
+ );
205
+ });
206
+
207
+ // /trashからメモを完全削除
208
+ app.post('/delete/:id', (req, res) => {
209
+ const connection = mod.connection;
210
+ const id = req.params.id;
211
+ connection.query(
212
+ 'DELETE FROM memos WHERE id = ?',
213
+ [id],
214
+ (err, data) => {
215
+ res.redirect('/trash');
216
+ connection.end();
217
+ }
218
+ );
219
+ });
220
+
221
+ // Trash Listを空にする
222
+ app.post('/empty', (req, res) => {
223
+ const connection = mod.connection;
224
+ connection.query(
225
+ 'DELETE FROM memos WHERE is_removed = true',
226
+ (err, data) => {
227
+ res.redirect('/trash');
228
+ connection.end();
229
+ }
230
+ );
231
+ });
232
+
233
+ const port = process.env.PORT || 8001;
234
+
235
+ app.listen(port, () => {
236
+ console.info(`Listeninng on ${port}`);
118
237
  });
119
238
  ```
120
239
 

11

情報の更新

2023/12/03 13:17

投稿

kanon_2155103
kanon_2155103

スコア7

test CHANGED
File without changes
test CHANGED
@@ -7,129 +7,28 @@
7
7
  ### ひとつめ・PostgreSQLと既存のコードが噛み合わない
8
8
  移行にあたり必要なコードの書き換えなどは一通り終えたつもりなのですが、実行してみたところ、EJSファイルに次のようなエラーが発生しました(EJSというのは、HTML内にJavascriptを簡単に記述できるJSのテンプレートエンジンです)。
9
9
 
10
- ```app.jsの実行結果
11
- Result {
12
- command: 'SELECT',
13
- rowCount: 1,
14
- oid: null,
15
- rows: [
16
- {
17
- id: 1,
18
- title: 'mikan',
19
- content: 'choco',
20
- created: 2023-12-01T07:16:14.517Z,
21
- modified: 2023-12-01T07:18:47.483Z,
22
- is_removed: false,
23
- is_locked: false
24
- }
25
- ],
26
- fields: [
27
- Field {
28
- name: 'id',
29
- tableID: 16399,
30
- columnID: 1,
31
- dataTypeID: 23,
32
- dataTypeSize: 4,
33
- dataTypeModifier: -1,
34
- format: 'text'
35
- },
36
- Field {
37
- name: 'title',
38
- tableID: 16399,
39
- columnID: 2,
40
- dataTypeID: 1043,
41
- dataTypeSize: -1,
42
- dataTypeModifier: 44,
43
- format: 'text'
44
- },
45
- Field {
46
- name: 'content',
47
- tableID: 16399,
48
- columnID: 3,
49
- dataTypeID: 1043,
50
- dataTypeSize: -1,
51
- dataTypeModifier: 10485764,
52
- format: 'text'
53
- },
54
- Field {
55
- name: 'created',
56
- tableID: 16399,
57
- columnID: 4,
58
- dataTypeID: 1114,
59
- dataTypeSize: 8,
60
- dataTypeModifier: -1,
61
- format: 'text'
62
- },
63
- Field {
64
- name: 'modified',
65
- tableID: 16399,
66
- columnID: 5,
67
- dataTypeID: 1114,
68
- dataTypeSize: 8,
69
- dataTypeModifier: -1,
70
- format: 'text'
71
- },
72
- Field {
73
- name: 'is_removed',
74
- tableID: 16399,
75
- columnID: 6,
76
- dataTypeID: 16,
77
- dataTypeSize: 1,
78
- dataTypeModifier: -1,
79
- format: 'text'
80
- },
81
- Field {
82
- name: 'is_locked',
83
- tableID: 16399,
84
- columnID: 7,
85
- dataTypeID: 16,
86
- dataTypeSize: 1,
87
- dataTypeModifier: -1,
88
- format: 'text'
89
- }
90
- ],
91
- _parsers: [
92
- [Function: parseInteger],
93
- [Function: noParse],
94
- [Function: noParse],
95
- [Function: parseDate],
96
- [Function: parseDate],
97
- [Function: parseBool],
98
- [Function: parseBool]
99
- ],
100
- _types: TypeOverrides {
101
- _types: {
102
- getTypeParser: [Function: getTypeParser],
103
- setTypeParser: [Function: setTypeParser],
104
- arrayParser: [Object],
105
- builtins: [Object]
106
- RowCtor: null,
107
- rowAsArray: false,
108
- _prebuiltEmptyResultObject: {
109
- id: null,
110
- title: null,
111
- content: null,
112
- created: null,
113
- modified: null,
114
- is_removed: null,
115
- is_locked: null
116
- } // ここまでがmemosに渡された内容だと思われます。
117
- >> 31| <% memos.forEach((memo) => { %>
118
- 32| <li>
119
- 33| <span class="title-column"><%= memo.title %></span>
120
- 34| <div class="items">
121
-
122
- memos.forEach is not a function
123
- at eval ("C:\\Users\\Kanon\\workspace\\memo-app\\views\\index.ejs":15:14)
124
- at index (C:\Users\Kanon\workspace\memo-app\node_modules\ejs\lib\ejs.js:703:17)
125
- at tryHandleCache (C:\Users\Kanon\workspace\memo-app\node_modules\ejs\lib\ejs.js:274:36)
126
- at View.exports.renderFile [as engine] (C:\Users\Kanon\workspace\memo-app\node_modules\ejs\lib\ejs.js:491:10)
127
- at View.render (C:\Users\Kanon\workspace\memo-app\node_modules\express\lib\view.js:135:8)
128
- at tryRender (C:\Users\Kanon\workspace\memo-app\node_modules\express\lib\application.js:657:10)
129
- at Function.render (C:\Users\Kanon\workspace\memo-app\node_modules\express\lib\application.js:609:3)
130
- at ServerResponse.render (C:\Users\Kanon\workspace\memo-app\node_modules\express\lib\response.js:1039:7)
131
- at Query.<anonymous> (C:\Users\Kanon\workspace\memo-app\app-new.js:20:8)
132
- at Query.handleReadyForQuery (C:\Users\Kanon\workspace\memo-app\node_modules\pg\lib\query.js:139:14)
10
+ ```app.jsの実行結果(更新しました)
11
+ Listeninng on 8001
12
+ [ // 2~12行目: 実行後、初めて/index もしくは
13
+ {
14
+ id: 1,
15
+ title: 'mikan',
16
+ content: 'choco',
17
+ created: 2023-12-01T07:16:14.517Z,
18
+ modified: 2023-12-01T07:18:47.483Z,
19
+ is_removed: false,
20
+ is_locked: false
21
+ }
22
+ ]
23
+ C:\Users\Kanon\workspace\memo-app\app.js:79
24
+ console.log(data.rows);
25
+ ^
26
+
27
+ TypeError: Cannot read properties of undefined (reading 'rows')
28
+ at Query.callback (C:\Users\Kanon\workspace\memo-app\app-new.js:79:21)
29
+ at Query.handleError (C:\Users\Kanon\workspace\memo-app\node_modules\pg\lib\query.js:128:19)
30
+ at C:\Users\Kanon\workspace\memo-app\node_modules\pg\lib\client.js:580:15
31
+ at processTicksAndRejections (node:internal/process/task_queues:78:11)
133
32
  ```
134
33
 
135
34
  実行結果はconsole.logで出力したmemosテーブルの情報とエラーメッセージで構成されています。

10

書式の改善

2023/12/03 09:59

投稿

kanon_2155103
kanon_2155103

スコア7

test CHANGED
File without changes
test CHANGED
@@ -130,10 +130,6 @@
130
130
  at ServerResponse.render (C:\Users\Kanon\workspace\memo-app\node_modules\express\lib\response.js:1039:7)
131
131
  at Query.<anonymous> (C:\Users\Kanon\workspace\memo-app\app-new.js:20:8)
132
132
  at Query.handleReadyForQuery (C:\Users\Kanon\workspace\memo-app\node_modules\pg\lib\query.js:139:14)
133
- ```
134
-
135
- ```memos
136
-
137
133
  ```
138
134
 
139
135
  実行結果はconsole.logで出力したmemosテーブルの情報とエラーメッセージで構成されています。

9

書式の改善

2023/12/03 09:50

投稿

kanon_2155103
kanon_2155103

スコア7

test CHANGED
File without changes
test CHANGED
@@ -106,6 +106,14 @@
106
106
  RowCtor: null,
107
107
  rowAsArray: false,
108
108
  _prebuiltEmptyResultObject: {
109
+ id: null,
110
+ title: null,
111
+ content: null,
112
+ created: null,
113
+ modified: null,
114
+ is_removed: null,
115
+ is_locked: null
116
+ } // ここまでがmemosに渡された内容だと思われます。
109
117
  >> 31| <% memos.forEach((memo) => { %>
110
118
  32| <li>
111
119
  33| <span class="title-column"><%= memo.title %></span>
@@ -124,7 +132,10 @@
124
132
  at Query.handleReadyForQuery (C:\Users\Kanon\workspace\memo-app\node_modules\pg\lib\query.js:139:14)
125
133
  ```
126
134
 
127
- こちらがapp.js実行時に出力された結果です。
135
+ ```memos
136
+
137
+ ```
138
+
128
139
  実行結果はconsole.logで出力したmemosテーブルの情報とエラーメッセージで構成されています。
129
140
  また、どうやらnode app.jsコマンドでアプリを起動した際ではなく、Localhost8001にアクセスした時にエラーが起こっているようです。
130
141
 

8

書式の改善

2023/12/03 09:29

投稿

kanon_2155103
kanon_2155103

スコア7

test CHANGED
File without changes
test CHANGED
@@ -7,10 +7,126 @@
7
7
  ### ひとつめ・PostgreSQLと既存のコードが噛み合わない
8
8
  移行にあたり必要なコードの書き換えなどは一通り終えたつもりなのですが、実行してみたところ、EJSファイルに次のようなエラーが発生しました(EJSというのは、HTML内にJavascriptを簡単に記述できるJSのテンプレートエンジンです)。
9
9
 
10
+ ```app.jsの実行結果
11
+ Result {
12
+ command: 'SELECT',
13
+ rowCount: 1,
14
+ oid: null,
15
+ rows: [
16
+ {
17
+ id: 1,
18
+ title: 'mikan',
19
+ content: 'choco',
20
+ created: 2023-12-01T07:16:14.517Z,
21
+ modified: 2023-12-01T07:18:47.483Z,
22
+ is_removed: false,
23
+ is_locked: false
24
+ }
25
+ ],
26
+ fields: [
27
+ Field {
28
+ name: 'id',
29
+ tableID: 16399,
30
+ columnID: 1,
31
+ dataTypeID: 23,
32
+ dataTypeSize: 4,
33
+ dataTypeModifier: -1,
34
+ format: 'text'
35
+ },
36
+ Field {
37
+ name: 'title',
38
+ tableID: 16399,
39
+ columnID: 2,
40
+ dataTypeID: 1043,
41
+ dataTypeSize: -1,
42
+ dataTypeModifier: 44,
43
+ format: 'text'
44
+ },
45
+ Field {
46
+ name: 'content',
47
+ tableID: 16399,
48
+ columnID: 3,
49
+ dataTypeID: 1043,
50
+ dataTypeSize: -1,
51
+ dataTypeModifier: 10485764,
52
+ format: 'text'
53
+ },
54
+ Field {
55
+ name: 'created',
56
+ tableID: 16399,
57
+ columnID: 4,
58
+ dataTypeID: 1114,
59
+ dataTypeSize: 8,
60
+ dataTypeModifier: -1,
61
+ format: 'text'
62
+ },
63
+ Field {
64
+ name: 'modified',
65
+ tableID: 16399,
66
+ columnID: 5,
67
+ dataTypeID: 1114,
68
+ dataTypeSize: 8,
69
+ dataTypeModifier: -1,
70
+ format: 'text'
71
+ },
72
+ Field {
73
+ name: 'is_removed',
74
+ tableID: 16399,
75
+ columnID: 6,
76
+ dataTypeID: 16,
77
+ dataTypeSize: 1,
78
+ dataTypeModifier: -1,
79
+ format: 'text'
80
+ },
81
+ Field {
82
+ name: 'is_locked',
83
+ tableID: 16399,
84
+ columnID: 7,
85
+ dataTypeID: 16,
86
+ dataTypeSize: 1,
87
+ dataTypeModifier: -1,
88
+ format: 'text'
89
+ }
90
+ ],
91
+ _parsers: [
92
+ [Function: parseInteger],
93
+ [Function: noParse],
94
+ [Function: noParse],
95
+ [Function: parseDate],
96
+ [Function: parseDate],
97
+ [Function: parseBool],
98
+ [Function: parseBool]
99
+ ],
100
+ _types: TypeOverrides {
101
+ _types: {
102
+ getTypeParser: [Function: getTypeParser],
103
+ setTypeParser: [Function: setTypeParser],
104
+ arrayParser: [Object],
105
+ builtins: [Object]
106
+ RowCtor: null,
107
+ rowAsArray: false,
108
+ _prebuiltEmptyResultObject: {
109
+ >> 31| <% memos.forEach((memo) => { %>
110
+ 32| <li>
111
+ 33| <span class="title-column"><%= memo.title %></span>
112
+ 34| <div class="items">
113
+
114
+ memos.forEach is not a function
115
+ at eval ("C:\\Users\\Kanon\\workspace\\memo-app\\views\\index.ejs":15:14)
116
+ at index (C:\Users\Kanon\workspace\memo-app\node_modules\ejs\lib\ejs.js:703:17)
117
+ at tryHandleCache (C:\Users\Kanon\workspace\memo-app\node_modules\ejs\lib\ejs.js:274:36)
10
- app.jsの実行結果】https://drive.google.com/file/d/1Rj-q4GFSJzGgFgEeUCYEDvqryn9oxaH8/view?usp=sharing
118
+ at View.exports.renderFile [as engine] (C:\Users\Kanon\workspace\memo-app\node_modules\ejs\lib\ejs.js:491:10)
11
-
119
+ at View.render (C:\Users\Kanon\workspace\memo-app\node_modules\express\lib\view.js:135:8)
120
+ at tryRender (C:\Users\Kanon\workspace\memo-app\node_modules\express\lib\application.js:657:10)
121
+ at Function.render (C:\Users\Kanon\workspace\memo-app\node_modules\express\lib\application.js:609:3)
122
+ at ServerResponse.render (C:\Users\Kanon\workspace\memo-app\node_modules\express\lib\response.js:1039:7)
123
+ at Query.<anonymous> (C:\Users\Kanon\workspace\memo-app\app-new.js:20:8)
124
+ at Query.handleReadyForQuery (C:\Users\Kanon\workspace\memo-app\node_modules\pg\lib\query.js:139:14)
125
+ ```
126
+
12
- 文字数オーバーになってしまったためファイルのリンクから失礼いたしますが、こちらがapp.js実行時に出力された結果です。
127
+ こちらがapp.js実行時に出力された結果です。
128
+ 実行結果はconsole.logで出力したmemosテーブルの情報とエラーメッセージで構成されています。
13
- 実行結果はconsole.logで出力したテーブルデータとエラーメッセージで構成されていす。また、どうやらnode app.jsコマンドでアプリを起動した際ではなく、Localhost8001にアクセスした時にエラーが起こっているようです。
129
+ また、どうやらnode app.jsコマンドでアプリを起動した際ではなく、Localhost8001にアクセスした時にエラーが起こっているようです。
14
130
 
15
131
  まだPosrgreSQLに不慣れなため、おそらく書き換えの際に書式の間違いや誤字が発生したのだと思いますが、自力ではこれ以上見つけることができず……。
16
132
  どうか皆様のお知恵をお貸しくださいませ。
@@ -74,18 +190,13 @@
74
190
 
75
191
  また、該当のJSファイルとEJSファイルはこちらです。
76
192
 
77
- ```app.js
193
+ ```app.jsの/index周辺情報
78
194
  const express = require('express');
79
195
  const mod = require('./module')
80
196
  const app = express();
81
197
 
82
198
  app.use(express.static('public'));
83
199
  app.use(express.urlencoded({extended: false}));
84
-
85
- // ルートURLへのアクセスがあった際に/indexにリダイレクトする
86
- app.get('/', (req, res) => {
87
- res.redirect('/index');
88
- });
89
200
 
90
201
  // Memo Listの取得
91
202
  app.get('/index', (req, res) => {
@@ -98,123 +209,6 @@
98
209
  connection.end();
99
210
  }
100
211
  );
101
- });
102
-
103
- // 新規メモの作成ページを表示
104
- app.get('/new', (req, res) => {
105
- res.render('new.ejs');
106
- });
107
-
108
- // 新規メモを保存
109
- app.post('/create', (req, res) => {
110
- const connection = mod.connection;
111
- connection.query(
112
- 'INSERT INTO memos (title, content) VALUES (?, ?)',
113
- [req.body.memoTitle, req.body.memoContent],
114
- (err, data) => {
115
- res.redirect('/index');
116
- connection.end();
117
- }
118
- );
119
- });
120
-
121
- // メモの編集ページを取得
122
- app.get('/edit/:id', (req, res) => {
123
- const connection = mod.connection;
124
- connection.query(
125
- 'SELECT * FROM memos WHERE id = ?',
126
- [req.params.id],
127
- (err, data) => {
128
- res.render('edit.ejs', {memo: data[0]});
129
- connection.end();
130
- }
131
- );
132
- });
133
-
134
- // メモを更新
135
- app.post('/update/:id', (req, res) => {
136
- const connection = mod.connection;
137
- connection.query(
138
- 'UPDATE memos SET title = ?, content= ? WHERE id = ?',
139
- [req.body.memoTitle, req.body.memoContent, req.params.id],
140
- (err, data) => {
141
- res.redirect('/index');
142
- connection.end();
143
- }
144
- );
145
- });
146
-
147
- // Trash Listの取得
148
- app.get('/trash', (req, res) => {
149
- const connection = mod.connection;
150
- connection.query(
151
- 'SELECT * FROM memos WHERE is_removed = true',
152
- (err, data) => {
153
- console.log(data);
154
- res.render('trash.ejs', {memos: data});
155
- connection.end();
156
- }
157
- );
158
- });
159
-
160
- // メモを/indexから/trashへ
161
- app.post('/remove/:id', (req, res) => {
162
- const connection = mod.connection;
163
- const id = req.params.id;
164
- connection.query(
165
- 'UPDATE memos SET is_removed = true WHERE id = ?',
166
- [id],
167
- (err, data) => {
168
- res.redirect('/index');
169
- connection.end();
170
- }
171
- );
172
- });
173
-
174
- // メモを/trashから/indexへ
175
- app.post('/restore/:id', (req, res) => {
176
- const connection = mod.connection;
177
- const id = req.params.id;
178
- connection.query(
179
- 'UPDATE memos SET is_removed = false WHERE id = ?',
180
- [id],
181
- (err, data) => {
182
- res.redirect('/trash');
183
- connection.end();
184
- }
185
- );
186
- });
187
-
188
- // /trashからメモを完全削除
189
- app.post('/delete/:id', (req, res) => {
190
- const connection = mod.connection;
191
- const id = req.params.id;
192
- connection.query(
193
- 'DELETE FROM memos WHERE id = ?',
194
- [id],
195
- (err, data) => {
196
- res.redirect('/trash');
197
- connection.end();
198
- }
199
- );
200
- });
201
-
202
- // Trash Listを空にする
203
- app.post('/empty', (req, res) => {
204
- const connection = mod.connection;
205
- connection.query(
206
- 'DELETE FROM memos WHERE is_removed = true',
207
- (err, data) => {
208
- res.redirect('/trash');
209
- connection.end();
210
- }
211
- );
212
- });
213
-
214
- const port = process.env.PORT || 8001;
215
-
216
- app.listen(port, () => {
217
- console.info(`Listeninng on ${port}`);
218
212
  });
219
213
  ```
220
214
 

7

書式の改善

2023/12/03 09:22

投稿

kanon_2155103
kanon_2155103

スコア7

test CHANGED
File without changes
test CHANGED
@@ -17,12 +17,19 @@
17
17
 
18
18
  ### ふたつめ・PostgreSQLの生成列でTo_charを使いたい
19
19
  従来のMySQLでは、以下のように定義したカラムが存在します。
20
-
20
+ ```MySQL
21
- >カラム名 VARCHAR(15) DEFAULT GENERATED ALWAYS AS (DATE_FORMAT(参照カラム名, '%b %d %y %k:%i')) STORED;
21
+ ALTER TABLE テーブル名 ADD カラム名 VARCHAR(15) DEFAULT GENERATED ALWAYS AS (DATE_FORMAT(参照カラム名, '%b %d %y %k:%i')) STORED;
22
-
22
+ ```
23
23
  PostgreSQLでもこれと同様に機能するカラムを作りたいのですが、自分なりに調べて以下のように定義してみてもうまくいきませんでした。
24
24
 
25
+ ```PostgreSQLで試したコマンドとそのエラー
26
+ // 実行コマンド
25
- > カラム名 VARCHAR(15) DEFAULT GENERATED ALWAYS AS IDENTITY (To_char(参照カラム名, 'Mon DD YY HH24:MI'));
27
+ ALTER TABLE テーブル名 ADD カラム名 VARCHAR(15) DEFAULT GENERATED ALWAYS AS IDENTITY (To_char(参照カラム名, 'Mon DD YY HH24:MI'));
28
+
29
+ // エラー文
30
+ ERROR: "ALWAYS"またはその近辺で構文エラー
31
+ 行 1: ...ブル名 ADD カラム名 VARCHAR(15) DEFAULT GENERATED ALWAYS AS ...
32
+ ```
26
33
 
27
34
  To-charの生成列での使い方を検索してみたのですが、SELECT文での使用例しか見つけることができずに行き詰まっております。
28
35
  こちらについても、よい解決法をご教示いただけますと幸いです。
@@ -39,7 +46,7 @@
39
46
  title | character varying(40) | | | 'Untitled'::character varying
40
47
  content | character varying(10485760) | | |
41
48
  created | timestamp without time zone | | not null | CURRENT_TIMESTAMP
42
- modified | timestamp without time zone | | not null | CURRENT_TIMESTAMP
49
+ modified | > 引用テキストtimestamp without time zone | | not null | CURRENT_TIMESTAMP
43
50
  is_removed | boolean | | not null | false
44
51
  is_locked | boolean | | not null | false
45
52
  インデックス:

6

実行結果についての追記

2023/12/03 08:56

投稿

kanon_2155103
kanon_2155103

スコア7

test CHANGED
File without changes
test CHANGED
@@ -7,26 +7,10 @@
7
7
  ### ひとつめ・PostgreSQLと既存のコードが噛み合わない
8
8
  移行にあたり必要なコードの書き換えなどは一通り終えたつもりなのですが、実行してみたところ、EJSファイルに次のようなエラーが発生しました(EJSというのは、HTML内にJavascriptを簡単に記述できるJSのテンプレートエンジンです)。
9
9
 
10
- ```app.s実行時のエラーメッセージ
11
- _prebuiltEmptyResultObject: {
12
- >> 31| <% memos.forEach((memo) => { %>
13
- 32| <li>
14
- 33| <span class="title-column"><%= memo.title %></span>
15
- 34| <div class="items">
16
-
17
- memos.forEach is not a function
18
- at eval ("C:\\Users\\Kanon\\workspace\\memo-app\\views\\index.ejs":15:14)
19
- at index (C:\Users\Kanon\workspace\memo-app\node_modules\ejs\lib\ejs.js:703:17)
20
- at tryHandleCache (C:\Users\Kanon\workspace\memo-app\node_modules\ejs\lib\ejs.js:274:36)
21
- at View.exports.renderFile [as engine] (C:\Users\Kanon\workspace\memo-app\node_modules\ejs\lib\ejs.js:491:10)
10
+ app.jsの実行結果】https://drive.google.com/file/d/1Rj-q4GFSJzGgFgEeUCYEDvqryn9oxaH8/view?usp=sharing
22
- at View.render (C:\Users\Kanon\workspace\memo-app\node_modules\express\lib\view.js:135:8)
11
+
23
- at tryRender (C:\Users\Kanon\workspace\memo-app\node_modules\express\lib\application.js:657:10)
24
- at Function.render (C:\Users\Kanon\workspace\memo-app\node_modules\express\lib\application.js:609:3)
25
- at ServerResponse.render (C:\Users\Kanon\workspace\memo-app\node_modules\express\lib\response.js:1039:7)
26
- at Query.<anonymous> (C:\Users\Kanon\workspace\memo-app\app-new.js:20:8)
12
+ 文字数オーバーになってしまったためファイルのリンクから失礼いたしますが、こちらがapp.js実行時に出力された結果です。
27
- at Query.handleReadyForQuery (C:\Users\Kanon\workspace\memo-app\node_modules\pg\lib\query.js:139:14)
28
- ```
29
- どうやらnode app.jsコマンドでアプリを起動した際ではなく、Localhost8001にアクセスした時にエラーが起こっているようです。
13
+ 実行結果はconsole.logで出力したテーブルデータとエラーメッセージで構成されています。また、どうやらnode app.jsコマンドでアプリを起動した際ではなく、Localhost8001にアクセスした時にエラーが起こっているようです。
30
14
 
31
15
  まだPosrgreSQLに不慣れなため、おそらく書き換えの際に書式の間違いや誤字が発生したのだと思いますが、自力ではこれ以上見つけることができず……。
32
16
  どうか皆様のお知恵をお貸しくださいませ。

5

実行結果についての追記

2023/12/03 08:41

投稿

kanon_2155103
kanon_2155103

スコア7

test CHANGED
File without changes
test CHANGED
@@ -7,14 +7,12 @@
7
7
  ### ひとつめ・PostgreSQLと既存のコードが噛み合わない
8
8
  移行にあたり必要なコードの書き換えなどは一通り終えたつもりなのですが、実行してみたところ、EJSファイルに次のようなエラーが発生しました(EJSというのは、HTML内にJavascriptを簡単に記述できるJSのテンプレートエンジンです)。
9
9
 
10
- ```エラーメッセージ
10
+ ```app.s実行時のエラーメッセージ
11
- TypeError: C:\Users\Kanon\workspace\memo-app\views\index.ejs:31
12
- 29| </div>
11
+ _prebuiltEmptyResultObject: {
13
- 30| <ul class="table-body">
14
- >> 31| <% memos.forEach((memo) => { %>
12
+ >> 31| <% memos.forEach((memo) => { %>
15
- 32| <li>
13
+ 32| <li>
16
- 33| <span class="title-column"><%= memo.title %></span>
14
+ 33| <span class="title-column"><%= memo.title %></span>
17
- 34| <div class="items">
15
+ 34| <div class="items">
18
16
 
19
17
  memos.forEach is not a function
20
18
  at eval ("C:\\Users\\Kanon\\workspace\\memo-app\\views\\index.ejs":15:14)
@@ -25,9 +23,10 @@
25
23
  at tryRender (C:\Users\Kanon\workspace\memo-app\node_modules\express\lib\application.js:657:10)
26
24
  at Function.render (C:\Users\Kanon\workspace\memo-app\node_modules\express\lib\application.js:609:3)
27
25
  at ServerResponse.render (C:\Users\Kanon\workspace\memo-app\node_modules\express\lib\response.js:1039:7)
28
- at Query.<anonymous> (C:\Users\Kanon\workspace\memo-app\app.js:20:8)
26
+ at Query.<anonymous> (C:\Users\Kanon\workspace\memo-app\app-new.js:20:8)
29
27
  at Query.handleReadyForQuery (C:\Users\Kanon\workspace\memo-app\node_modules\pg\lib\query.js:139:14)
30
28
  ```
29
+ どうやらnode app.jsコマンドでアプリを起動した際ではなく、Localhost8001にアクセスした時にエラーが起こっているようです。
31
30
 
32
31
  まだPosrgreSQLに不慣れなため、おそらく書き換えの際に書式の間違いや誤字が発生したのだと思いますが、自力ではこれ以上見つけることができず……。
33
32
  どうか皆様のお知恵をお貸しくださいませ。

4

module.jsの追加

2023/12/03 07:48

投稿

kanon_2155103
kanon_2155103

スコア7

test CHANGED
File without changes
test CHANGED
@@ -226,16 +226,24 @@
226
226
  app.listen(port, () => {
227
227
  console.info(`Listeninng on ${port}`);
228
228
  });
229
+ ```
230
+
229
- /*
231
+ ```module.js
232
+ const { Client } = require('pg');
233
+
230
- const connection = mod.connection;
234
+ const connection = new Client({
235
+ user: 'postgres',
236
+ host: 'localhost',
237
+ database: 'hoge',
238
+ password: 'huga',
239
+ port: 5432,
240
+ });
241
+
231
- connection.connect((err) => {
242
+ connection.connect();
243
+
244
+ module.exports = {
232
- if (err) {
245
+ connection
233
- console.log('error connecting: ' + err.stack);
234
- return;
235
- }
246
+ }
236
- });
237
- */
238
-
239
247
  ```
240
248
 
241
249
  ```index.ejs

3

誤字の修正

2023/12/03 07:32

投稿

kanon_2155103
kanon_2155103

スコア7

test CHANGED
File without changes
test CHANGED
@@ -39,7 +39,7 @@
39
39
 
40
40
  PostgreSQLでもこれと同様に機能するカラムを作りたいのですが、自分なりに調べて以下のように定義してみてもうまくいきませんでした。
41
41
 
42
- > カラム名 VARCHAR(15) DEFAULT GENERATED ALWAYS AS IDENTITY (To-char(参照カラム名, 'Mon DD YY HH24:MI'));
42
+ > カラム名 VARCHAR(15) DEFAULT GENERATED ALWAYS AS IDENTITY (To_char(参照カラム名, 'Mon DD YY HH24:MI'));
43
43
 
44
44
  To-charの生成列での使い方を検索してみたのですが、SELECT文での使用例しか見つけることができずに行き詰まっております。
45
45
  こちらについても、よい解決法をご教示いただけますと幸いです。

2

書式の改善

2023/12/01 12:55

投稿

kanon_2155103
kanon_2155103

スコア7

test CHANGED
File without changes
test CHANGED
@@ -45,13 +45,45 @@
45
45
  こちらについても、よい解決法をご教示いただけますと幸いです。
46
46
 
47
47
  ### 該当のソースコード・テーブル
48
- 1枚目の画像が新しく作ったPostgreSQLのmemosテーブルの構造、2枚目が以前から存在したMySQLのmemosテーブルの構造です。
48
+ 以下ひとつめが新しく作ったPostgreSQLのmemosテーブルの構造、2枚目が以前から存在したMySQLのmemosテーブルの構造です。
49
+
49
-
50
+ ```PostgreSQL
51
+ memo_app=# \d memos;
52
+ テーブル"public.memos"
53
+ 列 | タイプ | 照合順序 | Null 値を許容 | デフォルト
54
+ ------------+-----------------------------+----------+---------------+-----------------------------------
55
+ id | integer | | not null | nextval('memos_id_seq'::regclass)
50
- ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2023-12-01/7229e22e-772b-4c09-beb1-7fc4e4d2a830.png)
56
+ title | character varying(40) | | | 'Untitled'::character varying
51
-
57
+ content | character varying(10485760) | | |
58
+ created | timestamp without time zone | | not null | CURRENT_TIMESTAMP
59
+ modified | timestamp without time zone | | not null | CURRENT_TIMESTAMP
60
+ is_removed | boolean | | not null | false
61
+ is_locked | boolean | | not null | false
62
+ インデックス:
63
+ "memos_pkey" PRIMARY KEY, btree (id)
64
+ トリガー:
65
+ update_tri BEFORE UPDATE ON memos FOR EACH ROW EXECUTE FUNCTION set_update_time()
66
+ ```
67
+
68
+ ```MySQL
69
+ mysql> desc memos;
52
- ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2023-12-01/01e50efd-33b5-47cc-9d7d-cedf66d96acd.png)
70
+ +---------------+----------------+------+-----+-------------------+-----------------------------------------------+
71
+ | Field | Type | Null | Key | Default | Extra |
72
+ +---------------+----------------+------+-----+-------------------+-----------------------------------------------+
73
+ | id | int | NO | PRI | NULL | auto_increment |
74
+ | title | varchar(40) | YES | | Untitled | |
75
+ | content | varchar(16383) | YES | | NULL | |
76
+ | created | timestamp | YES | | CURRENT_TIMESTAMP | DEFAULT_GENERATED |
77
+ | last_modified | datetime | YES | | CURRENT_TIMESTAMP | DEFAULT_GENERATED on update CURRENT_TIMESTAMP |
78
+ | modified | varchar(15) | YES | | NULL | STORED GENERATED |
79
+ | isLocked | tinyint(1) | NO | | 0 | |
80
+ | isRemoved | tinyint(1) | NO | | 0 | |
81
+ +---------------+----------------+------+-----+-------------------+-----------------------------------------------+
82
+ 8 rows in set (0.03 sec)
83
+ ```
53
84
 
54
85
  また、該当のJSファイルとEJSファイルはこちらです。
86
+
55
87
  ```app.js
56
88
  const express = require('express');
57
89
  const mod = require('./module')

1

レイアウトの改善

2023/12/01 12:50

投稿

kanon_2155103
kanon_2155103

スコア7

test CHANGED
File without changes
test CHANGED
@@ -7,7 +7,27 @@
7
7
  ### ひとつめ・PostgreSQLと既存のコードが噛み合わない
8
8
  移行にあたり必要なコードの書き換えなどは一通り終えたつもりなのですが、実行してみたところ、EJSファイルに次のようなエラーが発生しました(EJSというのは、HTML内にJavascriptを簡単に記述できるJSのテンプレートエンジンです)。
9
9
 
10
+ ```エラーメッセージ
11
+ TypeError: C:\Users\Kanon\workspace\memo-app\views\index.ejs:31
12
+ 29| </div>
13
+ 30| <ul class="table-body">
14
+ >> 31| <% memos.forEach((memo) => { %>
15
+ 32| <li>
16
+ 33| <span class="title-column"><%= memo.title %></span>
17
+ 34| <div class="items">
18
+
19
+ memos.forEach is not a function
20
+ at eval ("C:\\Users\\Kanon\\workspace\\memo-app\\views\\index.ejs":15:14)
21
+ at index (C:\Users\Kanon\workspace\memo-app\node_modules\ejs\lib\ejs.js:703:17)
22
+ at tryHandleCache (C:\Users\Kanon\workspace\memo-app\node_modules\ejs\lib\ejs.js:274:36)
10
- ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2023-12-01/69f87db8-4ae5-4d2d-96d2-09c49e2994fe.png)
23
+ at View.exports.renderFile [as engine] (C:\Users\Kanon\workspace\memo-app\node_modules\ejs\lib\ejs.js:491:10)
24
+ at View.render (C:\Users\Kanon\workspace\memo-app\node_modules\express\lib\view.js:135:8)
25
+ at tryRender (C:\Users\Kanon\workspace\memo-app\node_modules\express\lib\application.js:657:10)
26
+ at Function.render (C:\Users\Kanon\workspace\memo-app\node_modules\express\lib\application.js:609:3)
27
+ at ServerResponse.render (C:\Users\Kanon\workspace\memo-app\node_modules\express\lib\response.js:1039:7)
28
+ at Query.<anonymous> (C:\Users\Kanon\workspace\memo-app\app.js:20:8)
29
+ at Query.handleReadyForQuery (C:\Users\Kanon\workspace\memo-app\node_modules\pg\lib\query.js:139:14)
30
+ ```
11
31
 
12
32
  まだPosrgreSQLに不慣れなため、おそらく書き換えの際に書式の間違いや誤字が発生したのだと思いますが、自力ではこれ以上見つけることができず……。
13
33
  どうか皆様のお知恵をお貸しくださいませ。