質問編集履歴
21
誤植の修正
    
        title	
    CHANGED
    
    | 
         
            File without changes
         
     | 
    
        body	
    CHANGED
    
    | 
         @@ -286,7 +286,7 @@ 
     | 
|
| 
       286 
286 
     | 
    
         
             
            こちらの投稿にて同時に質問していた「PostgreSQLの生成列でTo_charを使いたい」という問題は、本題がふたつ存在したことで分かり辛くなってしまったため、別の投稿に移動いたしました。
         
     | 
| 
       287 
287 
     | 
    
         
             
            https://teratail.com/questions/5xbktfa8l5dr0f
         
     | 
| 
       288 
288 
     | 
    
         | 
| 
       289 
     | 
    
         
            -
            また、こちらの投稿ででいただいたアドバイス試したところ、出力結果に進歩が見られましたので、別の投稿に移動することになりました。続きはこちらをご覧いただければと思います。
         
     | 
| 
      
 289 
     | 
    
         
            +
            また、こちらの投稿ででいただいたアドバイスを試してみたところ、出力結果に進歩が見られましたので、別の投稿に移動することになりました。続きはこちらをご覧いただければと思います。
         
     | 
| 
       290 
     | 
    
         
            -
            https://teratail.com/questions/ 
     | 
| 
      
 290 
     | 
    
         
            +
            https://teratail.com/questions/2k3v2jas7rn82h
         
     | 
| 
       291 
291 
     | 
    
         | 
| 
       292 
292 
     | 
    
         
             
            お付き合いいただいている皆様にはご不便をおかけしてしまい、誠に申し訳ございません。
         
     | 
20
情報の更新
    
        title	
    CHANGED
    
    | 
         
            File without changes
         
     | 
    
        body	
    CHANGED
    
    | 
         @@ -286,4 +286,7 @@ 
     | 
|
| 
       286 
286 
     | 
    
         
             
            こちらの投稿にて同時に質問していた「PostgreSQLの生成列でTo_charを使いたい」という問題は、本題がふたつ存在したことで分かり辛くなってしまったため、別の投稿に移動いたしました。
         
     | 
| 
       287 
287 
     | 
    
         
             
            https://teratail.com/questions/5xbktfa8l5dr0f
         
     | 
| 
       288 
288 
     | 
    
         | 
| 
      
 289 
     | 
    
         
            +
            また、こちらの投稿ででいただいたアドバイス試したところ、出力結果に進歩が見られましたので、別の投稿に移動することになりました。続きはこちらをご覧いただければと思います。
         
     | 
| 
      
 290 
     | 
    
         
            +
            https://teratail.com/questions/6zqnuiwft1zlkp
         
     | 
| 
      
 291 
     | 
    
         
            +
             
     | 
| 
       289 
292 
     | 
    
         
             
            お付き合いいただいている皆様にはご不便をおかけしてしまい、誠に申し訳ございません。
         
     | 
19
質問を以前の状態に戻しました
    
        title	
    CHANGED
    
    | 
         
            File without changes
         
     | 
    
        body	
    CHANGED
    
    | 
         @@ -5,30 +5,124 @@ 
     | 
|
| 
       5 
5 
     | 
    
         
             
            それに伴い、お尋ねしたい問題がございます。
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
            ### PostgreSQLと既存のコードが噛み合わない
         
     | 
| 
       8 
     | 
    
         
            -
            移行にあたり必要なコードの書き換えなどは一通り終えたつもりなのですが、実行してみたところ、EJSファイルに次のようなエラーが発生してしまい 
     | 
| 
      
 8 
     | 
    
         
            +
            移行にあたり必要なコードの書き換えなどは一通り終えたつもりなのですが、実行してみたところ、EJSファイルに次のようなエラーが発生してしまいました(EJSというのは、HTML内にJavascriptを簡単に記述できるJSのテンプレートエンジンです)。
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
     | 
    
         
            -
            ```app.jsの実行結果 
     | 
| 
      
 10 
     | 
    
         
            +
            ```app.jsの実行結果
         
     | 
| 
       11 
     | 
    
         
            -
            Listeninng on 8001 
     | 
| 
      
 11 
     | 
    
         
            +
            Listeninng on 8001
         
     | 
| 
      
 12 
     | 
    
         
            +
            Result {
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
      
 13 
     | 
    
         
            +
              command: 'SELECT',
         
     | 
| 
      
 14 
     | 
    
         
            +
              rowCount: 1,
         
     | 
| 
      
 15 
     | 
    
         
            +
              oid: null,
         
     | 
| 
      
 16 
     | 
    
         
            +
              rows: [
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
      
 17 
     | 
    
         
            +
                {
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
      
 18 
     | 
    
         
            +
                  id: 1,
         
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
      
 19 
     | 
    
         
            +
                  title: 'mikan',
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
      
 20 
     | 
    
         
            +
                  content: 'choco',
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
      
 21 
     | 
    
         
            +
                  created: 2023-12-01T07:16:14.517Z,
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
      
 22 
     | 
    
         
            +
                  modified: 2023-12-01T07:18:47.483Z,
         
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
      
 23 
     | 
    
         
            +
                  is_removed: false,
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
      
 24 
     | 
    
         
            +
                  is_locked: false
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
      
 25 
     | 
    
         
            +
                }
         
     | 
| 
       22 
     | 
    
         
            -
            ]
         
     | 
| 
      
 26 
     | 
    
         
            +
              ],
         
     | 
| 
      
 27 
     | 
    
         
            +
              fields: [
         
     | 
| 
      
 28 
     | 
    
         
            +
                Field {
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
      
 29 
     | 
    
         
            +
                  name: 'id',
         
     | 
| 
      
 30 
     | 
    
         
            +
                  tableID: 16399,
         
     | 
| 
      
 31 
     | 
    
         
            +
                  columnID: 1,
         
     | 
| 
      
 32 
     | 
    
         
            +
                  dataTypeID: 23,
         
     | 
| 
      
 33 
     | 
    
         
            +
                  dataTypeSize: 4,
         
     | 
| 
      
 34 
     | 
    
         
            +
                  dataTypeModifier: -1,
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
      
 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'
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
      
 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">
         
     | 
| 
       26 
114 
     | 
    
         | 
| 
      
 115 
     | 
    
         
            +
            memos.forEach is not a function
         
     | 
| 
      
 116 
     | 
    
         
            +
                at eval ("C:\\Users\\Kanon\\workspace\\memo-app\\views\\index.ejs":15:14)
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
      
 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)
         
     | 
| 
       28 
     | 
    
         
            -
                at Query. 
     | 
| 
      
 124 
     | 
    
         
            +
                at Query.<anonymous> (C:\Users\Kanon\workspace\memo-app\app-new.js:20:8)
         
     | 
| 
       29 
     | 
    
         
            -
                at Query. 
     | 
| 
      
 125 
     | 
    
         
            +
                at Query.handleReadyForQuery (C:\Users\Kanon\workspace\memo-app\node_modules\pg\lib\query.js:139:14)
         
     | 
| 
       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行目~: 最初にアクセスしたページから別のページに飛ぼうとすると起こるエラー
         
     | 
| 
       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 
     | 
| 
      
 152 
     | 
    
         
            +
            ```MySQL
         
     | 
| 
       59 
153 
     | 
    
         
             
            mysql> desc memos;
         
     | 
| 
       60 
154 
     | 
    
         
             
            +----------------+----------------+------+-----+-------------------+-----------------------------------------------+
         
     | 
| 
       61 
155 
     | 
    
         
             
            | Field          | Type           | Null | Key | Default           | Extra                                         |
         
     | 
| 
         @@ -71,10 +165,10 @@ 
     | 
|
| 
       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();
         
     | 
| 
         @@ -82,11 +176,6 @@ 
     | 
|
| 
       82 
176 
     | 
    
         
             
            app.use(express.static('public'));
         
     | 
| 
       83 
177 
     | 
    
         
             
            app.use(express.urlencoded({extended: false}));
         
     | 
| 
       84 
178 
     | 
    
         | 
| 
       85 
     | 
    
         
            -
            // ルートURLへのアクセスがあった際に/indexにリダイレクトする
         
     | 
| 
       86 
     | 
    
         
            -
            app.get('/', (req, res) => {
         
     | 
| 
       87 
     | 
    
         
            -
            	res.redirect('/index');
         
     | 
| 
       88 
     | 
    
         
            -
            });
         
     | 
| 
       89 
     | 
    
         
            -
             
     | 
| 
       90 
179 
     | 
    
         
             
            // Memo Listの取得
         
     | 
| 
       91 
180 
     | 
    
         
             
            app.get('/index', (req, res) => {
         
     | 
| 
       92 
181 
     | 
    
         
             
            	const connection = mod.connection;
         
     | 
| 
         @@ -99,123 +188,6 @@ 
     | 
|
| 
       99 
188 
     | 
    
         
             
            		}
         
     | 
| 
       100 
189 
     | 
    
         
             
            	);
         
     | 
| 
       101 
190 
     | 
    
         
             
            });
         
     | 
| 
       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 
     | 
    
         
            -
            });
         
     | 
| 
       219 
191 
     | 
    
         
             
            ```
         
     | 
| 
       220 
192 
     | 
    
         | 
| 
       221 
193 
     | 
    
         
             
            ```module.js
         
     | 
18
書式の改善
    
        title	
    CHANGED
    
    | 
         
            File without changes
         
     | 
    
        body	
    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
書式の改善
    
        title	
    CHANGED
    
    | 
         
            File without changes
         
     | 
    
        body	
    CHANGED
    
    | 
         @@ -35,7 +35,7 @@ 
     | 
|
| 
       35 
35 
     | 
    
         
             
            どうか皆様のお知恵をお貸しくださいませ。
         
     | 
| 
       36 
36 
     | 
    
         | 
| 
       37 
37 
     | 
    
         
             
            ### 該当のソースコード・テーブル
         
     | 
| 
       38 
     | 
    
         
            -
            以下のひとつめが新しく作ったPostgreSQLのmemosテーブルの構造、 
     | 
| 
      
 38 
     | 
    
         
            +
            以下のひとつめが新しく作ったPostgreSQLのmemosテーブルの構造、ふたつめが以前から存在したMySQLのmemosテーブルの構造です。
         
     | 
| 
       39 
39 
     | 
    
         | 
| 
       40 
40 
     | 
    
         
             
            ```PostgreSQL
         
     | 
| 
       41 
41 
     | 
    
         
             
            memo_app=# \d memos;
         
     | 
16
書式の改善
    
        title	
    CHANGED
    
    | 
         
            File without changes
         
     | 
    
        body	
    CHANGED
    
    | 
         @@ -311,7 +311,7 @@ 
     | 
|
| 
       311 
311 
     | 
    
         
             
            どうぞよろしくお願いいたします。
         
     | 
| 
       312 
312 
     | 
    
         | 
| 
       313 
313 
     | 
    
         
             
            ### 追記
         
     | 
| 
       314 
     | 
    
         
            -
            こちらの投稿にて同時に 
     | 
| 
      
 314 
     | 
    
         
            +
            こちらの投稿にて同時に質問していた「PostgreSQLの生成列でTo_charを使いたい」という問題は、本題がふたつ存在したことで分かり辛くなってしまったため、別の投稿に移動いたしました。
         
     | 
| 
       315 
315 
     | 
    
         
             
            https://teratail.com/questions/5xbktfa8l5dr0f
         
     | 
| 
       316 
316 
     | 
    
         | 
| 
       317 
317 
     | 
    
         
             
            お付き合いいただいている皆様にはご不便をおかけしてしまい、誠に申し訳ございません。
         
     | 
15
書式の改善
    
        title	
    CHANGED
    
    | 
         
            File without changes
         
     | 
    
        body	
    CHANGED
    
    | 
         @@ -312,4 +312,6 @@ 
     | 
|
| 
       312 
312 
     | 
    
         | 
| 
       313 
313 
     | 
    
         
             
            ### 追記
         
     | 
| 
       314 
314 
     | 
    
         
             
            こちらの投稿にて同時に記載していた「PostgreSQLの生成列でTo_charを使いたい」という質問は、本題がふたつ存在したために分かり辛くなってしまったため、別の投稿に移動いたしました。
         
     | 
| 
      
 315 
     | 
    
         
            +
            https://teratail.com/questions/5xbktfa8l5dr0f
         
     | 
| 
      
 316 
     | 
    
         
            +
             
     | 
| 
       315 
317 
     | 
    
         
             
            お付き合いいただいている皆様にはご不便をおかけしてしまい、誠に申し訳ございません。
         
     | 
14
書式の改善
    
        title	
    CHANGED
    
    | 
         
            File without changes
         
     | 
    
        body	
    CHANGED
    
    | 
         @@ -4,7 +4,7 @@ 
     | 
|
| 
       4 
4 
     | 
    
         
             
            Node.jsで書かれたメモアプリで、以前はMySQLを接続していたのですが、この度PostgreSQLに移行することになりました。
         
     | 
| 
       5 
5 
     | 
    
         
             
            それに伴い、お尋ねしたい問題がございます。
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
     | 
    
         
            -
            ###  
     | 
| 
      
 7 
     | 
    
         
            +
            ### PostgreSQLと既存のコードが噛み合わない
         
     | 
| 
       8 
8 
     | 
    
         
             
            移行にあたり必要なコードの書き換えなどは一通り終えたつもりなのですが、実行してみたところ、EJSファイルに次のようなエラーが発生しました(EJSというのは、HTML内にJavascriptを簡単に記述できるJSのテンプレートエンジンです)。
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
            ```app.jsの実行結果(更新しました)
         
     | 
13
書式の改善
    
        title	
    CHANGED
    
    | 
         
            File without changes
         
     | 
    
        body	
    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 
     | 
| 
      
 61 
     | 
    
         
            +
            | Field          | Type           | Null | Key | Default           | Extra                                         |
         
     | 
| 
       81 
     | 
    
         
            -
            +---------------+----------------+------+-----+-------------------+-----------------------------------------------+
         
     | 
| 
      
 62 
     | 
    
         
            +
            +----------------+----------------+------+-----+-------------------+-----------------------------------------------+
         
     | 
| 
       82 
     | 
    
         
            -
            | id 
     | 
| 
      
 63 
     | 
    
         
            +
            | id             | int            | NO   | PRI | NULL              | auto_increment                                |
         
     | 
| 
       83 
     | 
    
         
            -
            | title 
     | 
| 
      
 64 
     | 
    
         
            +
            | title          | varchar(40)    | YES  |     | Untitled          |                                               |
         
     | 
| 
       84 
     | 
    
         
            -
            | content 
     | 
| 
      
 65 
     | 
    
         
            +
            | content        | varchar(16383) | YES  |     | NULL              |                                               |
         
     | 
| 
       85 
     | 
    
         
            -
            | created 
     | 
| 
      
 66 
     | 
    
         
            +
            | created        | timestamp      | YES  |     | CURRENT_TIMESTAMP | DEFAULT_GENERATED                             |
         
     | 
| 
       86 
     | 
    
         
            -
            |  
     | 
| 
      
 67 
     | 
    
         
            +
            | modified       | datetime       | YES  |     | CURRENT_TIMESTAMP | DEFAULT_GENERATED on update CURRENT_TIMESTAMP |
         
     | 
| 
       87 
     | 
    
         
            -
            |  
     | 
| 
      
 68 
     | 
    
         
            +
            | modified_stamp | varchar(15)    | YES  |     | NULL              | STORED GENERATED                              |
         
     | 
| 
      
 69 
     | 
    
         
            +
            | is_removed     | tinyint(1)     | NO   |     | 0                 |                                               |
         
     | 
| 
       88 
     | 
    
         
            -
            |  
     | 
| 
      
 70 
     | 
    
         
            +
            | is_locked      | tinyint(1)     | NO   |     | 0                 |                                               |
         
     | 
| 
       89 
     | 
    
         
            -
            | isRemoved     | tinyint(1)     | NO   |     | 0                 |                                               |
         
     | 
| 
       90 
     | 
    
         
            -
            +---------------+----------------+------+-----+-------------------+-----------------------------------------------+
         
     | 
| 
      
 71 
     | 
    
         
            +
            +----------------+----------------+------+-----+-------------------+-----------------------------------------------+
         
     | 
| 
       91 
     | 
    
         
            -
            8 rows in set (0. 
     | 
| 
      
 72 
     | 
    
         
            +
            8 rows in set (0.05 sec)
         
     | 
| 
       92 
73 
     | 
    
         
             
            ```
         
     | 
| 
       93 
74 
     | 
    
         | 
| 
       94 
75 
     | 
    
         
             
            また、該当のJSファイルとEJSファイルはこちらです。
         
     | 
| 
         @@ -328,3 +309,7 @@ 
     | 
|
| 
       328 
309 
     | 
    
         
             
            PostgreSQL: v16.1
         
     | 
| 
       329 
310 
     | 
    
         | 
| 
       330 
311 
     | 
    
         
             
            どうぞよろしくお願いいたします。
         
     | 
| 
      
 312 
     | 
    
         
            +
             
     | 
| 
      
 313 
     | 
    
         
            +
            ### 追記
         
     | 
| 
      
 314 
     | 
    
         
            +
            こちらの投稿にて同時に記載していた「PostgreSQLの生成列でTo_charを使いたい」という質問は、本題がふたつ存在したために分かり辛くなってしまったため、別の投稿に移動いたしました。
         
     | 
| 
      
 315 
     | 
    
         
            +
            お付き合いいただいている皆様にはご不便をおかけしてしまい、誠に申し訳ございません。
         
     | 
12
情報の更新
    
        title	
    CHANGED
    
    | 
         
            File without changes
         
     | 
    
        body	
    CHANGED
    
    | 
         @@ -8,8 +8,8 @@ 
     | 
|
| 
       8 
8 
     | 
    
         
             
            移行にあたり必要なコードの書き換えなどは一通り終えたつもりなのですが、実行してみたところ、EJSファイルに次のようなエラーが発生しました(EJSというのは、HTML内にJavascriptを簡単に記述できるJSのテンプレートエンジンです)。
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
            ```app.jsの実行結果(更新しました)
         
     | 
| 
       11 
     | 
    
         
            -
            Listeninng on 8001
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
      
 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,12 +28,9 @@ 
     | 
|
| 
       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 
33 
     | 
    
         | 
| 
       34 
     | 
    
         
            -
            実行結果はconsole.logで出力したmemosテーブルの情報とエラーメッセージで構成されています。
         
     | 
| 
       35 
     | 
    
         
            -
            また、どうやらnode app.jsコマンドでアプリを起動した際ではなく、Localhost8001にアクセスした時にエラーが起こっているようです。
         
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
34 
     | 
    
         
             
            まだPosrgreSQLに不慣れなため、おそらく書き換えの際に書式の間違いや誤字が発生したのだと思いますが、自力ではこれ以上見つけることができず……。
         
     | 
| 
       38 
35 
     | 
    
         
             
            どうか皆様のお知恵をお貸しくださいませ。
         
     | 
| 
       39 
36 
     | 
    
         | 
| 
         @@ -96,7 +93,7 @@ 
     | 
|
| 
       96 
93 
     | 
    
         | 
| 
       97 
94 
     | 
    
         
             
            また、該当のJSファイルとEJSファイルはこちらです。
         
     | 
| 
       98 
95 
     | 
    
         | 
| 
       99 
     | 
    
         
            -
            ```app.js 
     | 
| 
      
 96 
     | 
    
         
            +
            ```app.js(更新しました)
         
     | 
| 
       100 
97 
     | 
    
         
             
            const express = require('express');
         
     | 
| 
       101 
98 
     | 
    
         
             
            const mod = require('./module')
         
     | 
| 
       102 
99 
     | 
    
         
             
            const app = express();
         
     | 
| 
         @@ -104,18 +101,140 @@ 
     | 
|
| 
       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 
117 
     | 
    
         
             
            			connection.end();
         
     | 
| 
       116 
118 
     | 
    
         
             
            		}
         
     | 
| 
       117 
119 
     | 
    
         
             
            	);
         
     | 
| 
       118 
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}`);
         
     | 
| 
      
 237 
     | 
    
         
            +
            });
         
     | 
| 
       119 
238 
     | 
    
         
             
            ```
         
     | 
| 
       120 
239 
     | 
    
         | 
| 
       121 
240 
     | 
    
         
             
            ```module.js
         
     | 
11
情報の更新
    
        title	
    CHANGED
    
    | 
         
            File without changes
         
     | 
    
        body	
    CHANGED
    
    | 
         @@ -7,129 +7,28 @@ 
     | 
|
| 
       7 
7 
     | 
    
         
             
            ### ひとつめ・PostgreSQLと既存のコードが噛み合わない
         
     | 
| 
       8 
8 
     | 
    
         
             
            移行にあたり必要なコードの書き換えなどは一通り終えたつもりなのですが、実行してみたところ、EJSファイルに次のようなエラーが発生しました(EJSというのは、HTML内にJavascriptを簡単に記述できるJSのテンプレートエンジンです)。
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
     | 
    
         
            -
            ```app.jsの実行結果
         
     | 
| 
      
 10 
     | 
    
         
            +
            ```app.jsの実行結果(更新しました)
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
      
 11 
     | 
    
         
            +
            Listeninng on 8001
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
      
 12 
     | 
    
         
            +
            [   // 2~12行目: 実行後、初めて/index もしくは
         
     | 
| 
       13 
     | 
    
         
            -
              rowCount: 1,
         
     | 
| 
       14 
     | 
    
         
            -
              oid: null,
         
     | 
| 
       15 
     | 
    
         
            -
              rows: [
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
      
 13 
     | 
    
         
            +
              {
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
      
 14 
     | 
    
         
            +
                id: 1,
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
      
 15 
     | 
    
         
            +
                title: 'mikan',
         
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
      
 16 
     | 
    
         
            +
                content: 'choco',
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
      
 17 
     | 
    
         
            +
                created: 2023-12-01T07:16:14.517Z,
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
      
 18 
     | 
    
         
            +
                modified: 2023-12-01T07:18:47.483Z,
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
      
 19 
     | 
    
         
            +
                is_removed: false,
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
      
 20 
     | 
    
         
            +
                is_locked: false
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
      
 21 
     | 
    
         
            +
              }
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
      
 22 
     | 
    
         
            +
            ]
         
     | 
| 
       26 
     | 
    
         
            -
              fields: [
         
     | 
| 
       27 
     | 
    
         
            -
                Field {
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
      
 23 
     | 
    
         
            +
            C:\Users\Kanon\workspace\memo-app\app.js:79
         
     | 
| 
       29 
     | 
    
         
            -
                  tableID: 16399,
         
     | 
| 
       30 
     | 
    
         
            -
                  columnID: 1,
         
     | 
| 
       31 
     | 
    
         
            -
                  dataTypeID: 23,
         
     | 
| 
       32 
     | 
    
         
            -
                  dataTypeSize: 4,
         
     | 
| 
       33 
     | 
    
         
            -
                  dataTypeModifier: -1,
         
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
      
 24 
     | 
    
         
            +
                                    console.log(data.rows);
         
     | 
| 
       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 
     | 
    
         
            -
             
     | 
| 
      
 25 
     | 
    
         
            +
                                                     ^
         
     | 
| 
       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 
26 
     | 
    
         | 
| 
       122 
     | 
    
         
            -
            memos.forEach is not a function
         
     | 
| 
       123 
     | 
    
         
            -
                at eval ("C:\\Users\\Kanon\\workspace\\memo-app\\views\\index.ejs":15:14)
         
     | 
| 
       124 
     | 
    
         
            -
             
     | 
| 
      
 27 
     | 
    
         
            +
            TypeError: Cannot read properties of undefined (reading 'rows')
         
     | 
| 
       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. 
     | 
| 
      
 28 
     | 
    
         
            +
                at Query.callback (C:\Users\Kanon\workspace\memo-app\app-new.js:79:21)
         
     | 
| 
       132 
     | 
    
         
            -
                at Query. 
     | 
| 
      
 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
書式の改善
    
        title	
    CHANGED
    
    | 
         
            File without changes
         
     | 
    
        body	
    CHANGED
    
    | 
         @@ -132,10 +132,6 @@ 
     | 
|
| 
       132 
132 
     | 
    
         
             
                at Query.handleReadyForQuery (C:\Users\Kanon\workspace\memo-app\node_modules\pg\lib\query.js:139:14)
         
     | 
| 
       133 
133 
     | 
    
         
             
            ```
         
     | 
| 
       134 
134 
     | 
    
         | 
| 
       135 
     | 
    
         
            -
            ```memos
         
     | 
| 
       136 
     | 
    
         
            -
             
     | 
| 
       137 
     | 
    
         
            -
            ```
         
     | 
| 
       138 
     | 
    
         
            -
             
     | 
| 
       139 
135 
     | 
    
         
             
            実行結果はconsole.logで出力したmemosテーブルの情報とエラーメッセージで構成されています。
         
     | 
| 
       140 
136 
     | 
    
         
             
            また、どうやらnode app.jsコマンドでアプリを起動した際ではなく、Localhost8001にアクセスした時にエラーが起こっているようです。
         
     | 
| 
       141 
137 
     | 
    
         | 
9
書式の改善
    
        title	
    CHANGED
    
    | 
         
            File without changes
         
     | 
    
        body	
    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 
     | 
    
         
            -
             
     | 
| 
      
 135 
     | 
    
         
            +
            ```memos
         
     | 
| 
      
 136 
     | 
    
         
            +
             
     | 
| 
      
 137 
     | 
    
         
            +
            ```
         
     | 
| 
      
 138 
     | 
    
         
            +
             
     | 
| 
       128 
139 
     | 
    
         
             
            実行結果はconsole.logで出力したmemosテーブルの情報とエラーメッセージで構成されています。
         
     | 
| 
       129 
140 
     | 
    
         
             
            また、どうやらnode app.jsコマンドでアプリを起動した際ではなく、Localhost8001にアクセスした時にエラーが起こっているようです。
         
     | 
| 
       130 
141 
     | 
    
         | 
8
書式の改善
    
        title	
    CHANGED
    
    | 
         
            File without changes
         
     | 
    
        body	
    CHANGED
    
    | 
         @@ -7,11 +7,127 @@ 
     | 
|
| 
       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>
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
      
 111 
     | 
    
         
            +
                33|                                                         <span class="title-column"><%= memo.title %></span>
         
     | 
| 
      
 112 
     | 
    
         
            +
                34|                                                         <div class="items">
         
     | 
| 
       11 
113 
     | 
    
         | 
| 
      
 114 
     | 
    
         
            +
            memos.forEach is not a function
         
     | 
| 
      
 115 
     | 
    
         
            +
                at eval ("C:\\Users\\Kanon\\workspace\\memo-app\\views\\index.ejs":15:14)
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
      
 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)
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
      
 118 
     | 
    
         
            +
                at View.exports.renderFile [as engine] (C:\Users\Kanon\workspace\memo-app\node_modules\ejs\lib\ejs.js:491:10)
         
     | 
| 
      
 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 
     | 
    
         
            +
            ```
         
     | 
| 
       14 
126 
     | 
    
         | 
| 
      
 127 
     | 
    
         
            +
            こちらがapp.js実行時に出力された結果です。
         
     | 
| 
      
 128 
     | 
    
         
            +
            実行結果はconsole.logで出力したmemosテーブルの情報とエラーメッセージで構成されています。
         
     | 
| 
      
 129 
     | 
    
         
            +
            また、どうやらnode app.jsコマンドでアプリを起動した際ではなく、Localhost8001にアクセスした時にエラーが起こっているようです。
         
     | 
| 
      
 130 
     | 
    
         
            +
             
     | 
| 
       15 
131 
     | 
    
         
             
            まだPosrgreSQLに不慣れなため、おそらく書き換えの際に書式の間違いや誤字が発生したのだと思いますが、自力ではこれ以上見つけることができず……。
         
     | 
| 
       16 
132 
     | 
    
         
             
            どうか皆様のお知恵をお貸しくださいませ。
         
     | 
| 
       17 
133 
     | 
    
         | 
| 
         @@ -74,7 +190,7 @@ 
     | 
|
| 
       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();
         
     | 
| 
         @@ -82,11 +198,6 @@ 
     | 
|
| 
       82 
198 
     | 
    
         
             
            app.use(express.static('public'));
         
     | 
| 
       83 
199 
     | 
    
         
             
            app.use(express.urlencoded({extended: false}));
         
     | 
| 
       84 
200 
     | 
    
         | 
| 
       85 
     | 
    
         
            -
            // ルートURLへのアクセスがあった際に/indexにリダイレクトする
         
     | 
| 
       86 
     | 
    
         
            -
            app.get('/', (req, res) => {
         
     | 
| 
       87 
     | 
    
         
            -
            	res.redirect('/index');
         
     | 
| 
       88 
     | 
    
         
            -
            });
         
     | 
| 
       89 
     | 
    
         
            -
             
     | 
| 
       90 
201 
     | 
    
         
             
            // Memo Listの取得
         
     | 
| 
       91 
202 
     | 
    
         
             
            app.get('/index', (req, res) => {
         
     | 
| 
       92 
203 
     | 
    
         
             
            	const connection = mod.connection;
         
     | 
| 
         @@ -99,123 +210,6 @@ 
     | 
|
| 
       99 
210 
     | 
    
         
             
            		}
         
     | 
| 
       100 
211 
     | 
    
         
             
            	);
         
     | 
| 
       101 
212 
     | 
    
         
             
            });
         
     | 
| 
       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 
     | 
    
         
            -
            });
         
     | 
| 
       219 
213 
     | 
    
         
             
            ```
         
     | 
| 
       220 
214 
     | 
    
         | 
| 
       221 
215 
     | 
    
         
             
            ```module.js
         
     | 
7
書式の改善
    
        title	
    CHANGED
    
    | 
         
            File without changes
         
     | 
    
        body	
    CHANGED
    
    | 
         @@ -17,13 +17,20 @@ 
     | 
|
| 
       17 
17 
     | 
    
         | 
| 
       18 
18 
     | 
    
         
             
            ### ふたつめ・PostgreSQLの生成列でTo_charを使いたい
         
     | 
| 
       19 
19 
     | 
    
         
             
            従来のMySQLでは、以下のように定義したカラムが存在します。
         
     | 
| 
      
 20 
     | 
    
         
            +
            ```MySQL
         
     | 
| 
      
 21 
     | 
    
         
            +
            ALTER TABLE テーブル名 ADD カラム名 VARCHAR(15) DEFAULT GENERATED ALWAYS AS (DATE_FORMAT(参照カラム名, '%b %d %y %k:%i')) STORED;
         
     | 
| 
      
 22 
     | 
    
         
            +
            ```
         
     | 
| 
      
 23 
     | 
    
         
            +
            PostgreSQLでもこれと同様に機能するカラムを作りたいのですが、自分なりに調べて以下のように定義してみてもうまくいきませんでした。
         
     | 
| 
       20 
24 
     | 
    
         | 
| 
      
 25 
     | 
    
         
            +
            ```PostgreSQLで試したコマンドとそのエラー
         
     | 
| 
      
 26 
     | 
    
         
            +
            // 実行コマンド
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
      
 27 
     | 
    
         
            +
            ALTER TABLE テーブル名 ADD カラム名 VARCHAR(15) DEFAULT GENERATED ALWAYS AS IDENTITY (To_char(参照カラム名, 'Mon DD YY HH24:MI'));
         
     | 
| 
       22 
28 
     | 
    
         | 
| 
      
 29 
     | 
    
         
            +
            // エラー文
         
     | 
| 
      
 30 
     | 
    
         
            +
            ERROR:  "ALWAYS"またはその近辺で構文エラー
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
      
 31 
     | 
    
         
            +
            行 1: ...ブル名 ADD カラム名 VARCHAR(15) DEFAULT GENERATED ALWAYS AS ...
         
     | 
| 
      
 32 
     | 
    
         
            +
            ```
         
     | 
| 
       24 
33 
     | 
    
         | 
| 
       25 
     | 
    
         
            -
            > カラム名 VARCHAR(15) DEFAULT GENERATED ALWAYS AS IDENTITY (To_char(参照カラム名, 'Mon DD YY HH24:MI'));
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
34 
     | 
    
         
             
            To-charの生成列での使い方を検索してみたのですが、SELECT文での使用例しか見つけることができずに行き詰まっております。
         
     | 
| 
       28 
35 
     | 
    
         
             
            こちらについても、よい解決法をご教示いただけますと幸いです。
         
     | 
| 
       29 
36 
     | 
    
         | 
| 
         @@ -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
実行結果についての追記
    
        title	
    CHANGED
    
    | 
         
            File without changes
         
     | 
    
        body	
    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 
     | 
    
         
            -
             
     | 
| 
      
 10 
     | 
    
         
            +
            【app.jsの実行結果】https://drive.google.com/file/d/1Rj-q4GFSJzGgFgEeUCYEDvqryn9oxaH8/view?usp=sharing
         
     | 
| 
       15 
     | 
    
         
            -
                34|                                                         <div class="items">
         
     | 
| 
       16 
11 
     | 
    
         | 
| 
       17 
     | 
    
         
            -
            memos.forEach is not a function
         
     | 
| 
       18 
     | 
    
         
            -
                at eval ("C:\\Users\\Kanon\\workspace\\memo-app\\views\\index.ejs":15:14)
         
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
      
 12 
     | 
    
         
            +
            文字数オーバーになってしまったためファイルのリンクから失礼いたしますが、こちらがapp.js実行時に出力された結果です。
         
     | 
| 
       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)
         
     | 
| 
       22 
     | 
    
         
            -
                at View.render (C:\Users\Kanon\workspace\memo-app\node_modules\express\lib\view.js:135:8)
         
     | 
| 
       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)
         
     | 
| 
       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
実行結果についての追記
    
        title	
    CHANGED
    
    | 
         
            File without changes
         
     | 
    
        body	
    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 
     | 
    
         
            -
             
     | 
| 
      
 11 
     | 
    
         
            +
              _prebuiltEmptyResultObject: {
         
     | 
| 
       13 
     | 
    
         
            -
                30| 				<ul class="table-body">
         
     | 
| 
       14 
     | 
    
         
            -
             >> 31| 
     | 
| 
      
 12 
     | 
    
         
            +
             >> 31|                                         <% memos.forEach((memo) => { %>
         
     | 
| 
       15 
     | 
    
         
            -
                32| 
     | 
| 
      
 13 
     | 
    
         
            +
                32|                                                 <li>
         
     | 
| 
       16 
     | 
    
         
            -
                33| 
     | 
| 
      
 14 
     | 
    
         
            +
                33|                                                         <span class="title-column"><%= memo.title %></span>
         
     | 
| 
       17 
     | 
    
         
            -
                34| 
     | 
| 
      
 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の追加
    
        title	
    CHANGED
    
    | 
         
            File without changes
         
     | 
    
        body	
    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 =  
     | 
| 
      
 234 
     | 
    
         
            +
            const connection = new Client({
         
     | 
| 
       231 
     | 
    
         
            -
             
     | 
| 
      
 235 
     | 
    
         
            +
            	user: 'postgres',
         
     | 
| 
       232 
     | 
    
         
            -
            	if (err) {
         
     | 
| 
       233 
     | 
    
         
            -
             
     | 
| 
      
 236 
     | 
    
         
            +
            	host: 'localhost',
         
     | 
| 
      
 237 
     | 
    
         
            +
            	database: 'hoge',
         
     | 
| 
      
 238 
     | 
    
         
            +
            	password: 'huga',
         
     | 
| 
       234 
     | 
    
         
            -
             
     | 
| 
      
 239 
     | 
    
         
            +
            	port: 5432,
         
     | 
| 
       235 
     | 
    
         
            -
            	}
         
     | 
| 
       236 
240 
     | 
    
         
             
            });
         
     | 
| 
       237 
     | 
    
         
            -
            */
         
     | 
| 
       238 
241 
     | 
    
         | 
| 
      
 242 
     | 
    
         
            +
            connection.connect();
         
     | 
| 
      
 243 
     | 
    
         
            +
             
     | 
| 
      
 244 
     | 
    
         
            +
            module.exports = {
         
     | 
| 
      
 245 
     | 
    
         
            +
            	connection
         
     | 
| 
      
 246 
     | 
    
         
            +
            }
         
     | 
| 
       239 
247 
     | 
    
         
             
            ```
         
     | 
| 
       240 
248 
     | 
    
         | 
| 
       241 
249 
     | 
    
         
             
            ```index.ejs
         
     | 
3
誤字の修正
    
        title	
    CHANGED
    
    | 
         
            File without changes
         
     | 
    
        body	
    CHANGED
    
    | 
         @@ -39,7 +39,7 @@ 
     | 
|
| 
       39 
39 
     | 
    
         | 
| 
       40 
40 
     | 
    
         
             
            PostgreSQLでもこれと同様に機能するカラムを作りたいのですが、自分なりに調べて以下のように定義してみてもうまくいきませんでした。
         
     | 
| 
       41 
41 
     | 
    
         | 
| 
       42 
     | 
    
         
            -
            > カラム名 VARCHAR(15) DEFAULT GENERATED ALWAYS AS IDENTITY ( 
     | 
| 
      
 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
書式の改善
    
        title	
    CHANGED
    
    | 
         
            File without changes
         
     | 
    
        body	
    CHANGED
    
    | 
         @@ -45,13 +45,45 @@ 
     | 
|
| 
       45 
45 
     | 
    
         
             
            こちらについても、よい解決法をご教示いただけますと幸いです。
         
     | 
| 
       46 
46 
     | 
    
         | 
| 
       47 
47 
     | 
    
         
             
            ### 該当のソースコード・テーブル
         
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
      
 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 
     | 
    
         
            -
             
     | 
| 
      
 56 
     | 
    
         
            +
             title      | character varying(40)       |          |               | 'Untitled'::character varying
         
     | 
| 
      
 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 
     | 
    
         
            +
            ```
         
     | 
| 
       51 
67 
     | 
    
         | 
| 
      
 68 
     | 
    
         
            +
            ```MySQL
         
     | 
| 
      
 69 
     | 
    
         
            +
            mysql> desc memos;
         
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
      
 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
レイアウトの改善
    
        title	
    CHANGED
    
    | 
         
            File without changes
         
     | 
    
        body	
    CHANGED
    
    | 
         @@ -7,8 +7,28 @@ 
     | 
|
| 
       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>
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
      
 16 
     | 
    
         
            +
                33| 							<span class="title-column"><%= memo.title %></span>
         
     | 
| 
      
 17 
     | 
    
         
            +
                34| 							<div class="items">
         
     | 
| 
       11 
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)
         
     | 
| 
      
 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 
     | 
    
         
            +
            ```
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
       12 
32 
     | 
    
         
             
            まだPosrgreSQLに不慣れなため、おそらく書き換えの際に書式の間違いや誤字が発生したのだと思いますが、自力ではこれ以上見つけることができず……。
         
     | 
| 
       13 
33 
     | 
    
         
             
            どうか皆様のお知恵をお貸しくださいませ。
         
     | 
| 
       14 
34 
     | 
    
         |