2020/07/26現在
まだ解決はしていません。
Linux環境で動作確認ができましたので、Windows環境の問題だと思います。
何かしらお気づきの点がございましたらコメントをよろしくお願いいたします。
前提・実現したいこと
Node.jsとPostgreSQLを使って、ローカルのWindows10マシンで動く掲示板を作っています。
N予備校というサービスの教材です。
PostgreSQLに掲示板の投稿内容を保存して表示したいです。
掲示板のソースはここにあるものです。
progedu/intro-curriculum-3022 at master-2020
N予備校の教材としてはVirtualBox+Vagrant+Ubuntuを前提なのですが、Windowsで動作させたいと思っています。
N予備校では動作保証外なので、こちらで質問させていただいています。
発生している問題・エラーメッセージ
node index.jsでサーバーを起動してブラウザでアクセスすると接続中のままで表示されません。
このような状況でデーターベースを確認すると以下のようなメッセージになります。
psql -U postgres psql (12.3) "help"でヘルプを表示します。 postgres=#\c secret_board データベース"secret_board"にユーザ"postgres"として接続しました。 secret_board=#select * from "Post"; ERROR: リレーション"Post"は存在しません 行 1: select * from "Post"; ^ secret_board=#
該当のソースコード
以下が掲示板のソースコードです。
progedu/intro-curriculum-3022 at master-2020
これ以外でもN予備校のPostgreSQLを利用したプログラムが同じように動作しない状況です。
post.js
intro-curriculum-3022/post.js at master-2020 · progedu/intro-curriculum-3022
javascript
1'use strict'; 2const Sequelize = require('sequelize'); 3const sequelize = new Sequelize( 4 'postgres://postgres:postgres@localhost/secret_board', 5 { 6 logging: false 7 }); 8const Post = sequelize.define('Post', { 9 id: { 10 type: Sequelize.INTEGER, 11 autoIncrement: true, 12 primaryKey: true 13 }, 14 content: { 15 type: Sequelize.TEXT 16 }, 17 postedBy: { 18 type: Sequelize.STRING 19 }, 20 trackingCookie: { 21 type: Sequelize.STRING 22 } 23}, { 24 freezeTableName: true, 25 timestamps: true 26 }); 27 28Post.sync(); 29module.exports = Post;
posts-handler.js
intro-curriculum-3022/posts-handler.js at master-2020 · progedu/intro-curriculum-3022
javascript
1'use strict'; 2const pug = require('pug'); 3const util = require('./handler-util'); 4const Post = require('./post'); 5 6function handle(req, res) { 7 switch (req.method) { 8 case 'GET': 9 res.writeHead(200, { 10 'Content-Type': 'text/html; charset=utf-8' 11 }); 12 Post.findAll().then((posts) => { 13 res.end(pug.renderFile('./views/posts.pug', { 14 posts: posts 15 })); 16 }); 17 break; 18 case 'POST': 19 let body = []; 20 req.on('data', (chunk) => { 21 body.push(chunk); 22 }).on('end', () => { 23 body = Buffer.concat(body).toString(); 24 const decoded = decodeURIComponent(body); 25 const content = decoded.split('content=')[1]; 26 console.info('投稿されました: ' + content); 27 Post.create({ 28 content: content, 29 trackingCookie: null, 30 postedBy: req.user 31 }).then(() => { 32 handleRedirectPosts(req, res); 33 }); 34 }); 35 break; 36 default: 37 util.handleBadRequest(req, res); 38 break; 39 } 40} 41 42function handleRedirectPosts(req, res) { 43 res.writeHead(303, { 44 'Location': '/posts' 45 }); 46 res.end(); 47} 48 49module.exports = { 50 handle 51};
試したこと
- PostgreSQLはインストールしてPgAdmin 4から起動、ブラウザで動作
- コマンドプロンプトからpsql -U postgresでコマンド画面起動
- create database secret_board;でデーターベースを作成
- FirefoxでもGoogle Chromeでも動作は同じ状況
- node-postgresモジュールのサンプルを実行しましたが、コンソールに何も表示されません。
Connecting | node-postgres
netstatというコマンドでは以下のように出ます。
netstat | grep 5432
TCP [::1]:4244 (私のPC名):5432 ESTABLISHED TCP [::1]:4247 (私のPC名):5432 ESTABLISHED TCP [::1]:5432 (私のPC名):4244 ESTABLISHED TCP [::1]:5432 (私のPC名):4247 ESTABLISHED
PostgreSQL Portable
PostgreSQL Portableという別のものも試しましたが、やはりnode.jsへのアクセスのところでうまくいきませんでした。
コマンド画面やコマンドプロンプトからのログイン、データーベースの作成はできました。
Vagrant + Ubuntu環境で動作確認(2020/07/26)
- 同じソースを実行してみたところデーターベースに保存できました。
補足情報(FW/ツールのバージョンなど)
- postgresql-12.3-2-windows-x64
PostgreSQL: Downloads - PostgreSQL Portable(10.1.1)
PostgreSQL Portable - Browse /v10.1.1 at SourceForge.net - node.js(v14.3.0)
- Windows 10(64bit)
- Firefox(78.0.2)
- Google chrome(84.0.4147.89)
pg_hba.confの一部
# IPv4 local connections: host all all 127.0.0.1/32 trust # IPv6 local connections: host all all ::1/128 trust
node.jsの動作
PostgreSQLを使用しないnode.jsのプログラムは、サーバーを起動できてブラウザで表示できています。
どうぞよろしくお願いいたします。