質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Q&A

1回答

1484閲覧

Windows 10でnode.jsからPostgreSQLのデーターベースに読み書きしたい

smile_20200722

総合スコア11

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

0グッド

0クリップ

投稿2020/07/22 14:48

編集2020/07/25 15:42

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/ツールのバージョンなど)

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のプログラムは、サーバーを起動できてブラウザで表示できています。

どうぞよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2020/07/22 15:04

postというテーブルがあるスキーマを確認して下さい。
smile_20200722

2020/07/22 15:25

>Orlofskyさん ご指摘ありがとうございます。リンクを修正させていただきました。 >saziさん ご回答ありがとうございます。 以下のような確認方法でいいのでしょうか? --- secret_board=# \dn スキーマ一覧 名前 | 所有者 --------+---------- public | postgres (1 行) --- スキーマというものを理解しておらず、教材にもそれに関する指示がないのですが、 自分で作る(?)ものなのでしょうか?
sazi

2020/07/22 16:37

ログインするとカレントスキーマ―が割り当てられますが、その際ログイン名と同じ名前のスキーマ―がカレントになります。 同じ名前が無い場合は、publicスキーマ―がカレントスキーマ―になります。 カレントスキーマ―にあるテーブルはスキーマ―名の省略は可能ですが、そうでない場合は「リレーションが無い」というエラーになります。 なので、確認した次第。
smile_20200722

2020/07/23 14:48

>saziさん ご回答ありがとうございます。 現在、サービス側に問い合わせ中です。 このプログラムでいうところのPostは自分で作成しなければならないということでしょうか? 教材には secret_board というデーターベースの作成のみが載ってます。 post.jsの4行目では、IDやパスワード、データーベース名を指定しているように見えますし、 8行目でもPostの記述があるのですが、自動的に作成はされないのでしょうか?
Orlofsky

2020/07/23 18:13

>ご指摘ありがとうございます。リンクを修正させていただきました。 ひとつも直っていません。
smile_20200722

2020/07/24 00:04

>Orlofskyさん 確認不足ですみません。 今度は修正できていますでしょうか?
guest

回答1

0

「入門コースの3章22節」を学んでいるみたいですが、そこに「データベースにテーブルを作る」みたいな事が書いてありませんか?テーブルの名前は Post です。
書いてない場合は動作保証外とか関係なく先生に質問した方がよいですよ。環境の問題ではないので。

投稿2020/07/22 16:51

bboydaisuke

総合スコア5275

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

smile_20200722

2020/07/23 14:35

ご回答ありがとうございます。 現在、問い合わせ中です。 講義にはデーターベースを作成するcreate database secret_board;はありますが、 テーブルを作成する内容は載っていません。
bboydaisuke

2020/07/23 19:27 編集

コメント通知があったので質問を見返したのですが、post.js を実行しても「”同じように”動作しない」ですか?「同じように」というのは「同じエラーで」と理解しますが、同じエラーですか? また、post.js を実行してテーブル Post を作る、とかテキストに書かれていませんか?
smile_20200722

2020/07/24 00:58

ブラウザが接続中のままになる状況は同じです。 テキストにデーターモデリングとしての設計とそれをnode.jsのsequelizeモジュールとしてどのように 記述するかの説明はあります。 「データーベースに保存する」という項目で、posts-handler.jsのPOSTメソッドに追記するように 書かれています。 それ自体を記述して実行しています。 posts-handler.jsのソースを該当のソースコードに追加しました。 他のプログラムという意味について説明不足でしたので書かせていただきます。 これはこの掲示板プログラム以外のPostgreSQLのプログラムという意味ではありませんでした。 N予備校では、同じプログラムを少しずつ機能追加して章が進んでいきます。 章の始めには、前章の内容を指定のリポジトリからクローンしてテキストの指示にしたがい修正し、実行します。 そして練習問題でそこまでのテキストで機能追加された別のリポジトリからフォークしてプルリクまでを行います。 他のプログラムという言い方は、この別のリポジトリをそれぞれ実行しても同じ状況になっているという 意味でした。 何かお気づきの点がございましたらどうぞよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問