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

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

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

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

PostgreSQL

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

3544閲覧

webページからPostgreSQLに動的にアクセスしたい

jujujujujujuju

総合スコア12

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

PostgreSQL

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2019/04/15 04:21

編集2019/04/15 06:22

前提・実現したいこと

vue.jsを用いて作成したwebページにて、ボタンを押すとPostgreSQLにアクセスしてデータを取ってくるような処理を作成したいのですが上手くいきません。
node.jsでPostgreSQLを叩いた時とほぼ同じようなコードを使用しているのが問題かとは思うのですが、webページからPostgreSQLに動的にアクセスするにはどのように実装すれば良いのかが分かりません。お手数ですが、ご教授いただければ幸いです。

追記: これはサーバーサイドでのみ動くモジュールのようです。webページからPostgreSQLを叩く方法(できればvue.jsを用いて)をご教授いただければ幸いです。

発生している問題・エラーメッセージ

ボタンを押すと以下のような警告・エラーが表示されます(GoogleChrome Console)

[Vue warn]: Error in v-on handler: "Error: Cannot find module 'net'" found in ---> <VBtn> <VContent> <VApp> <App> at src/App.vue <Root> warn @ vue.runtime.esm.js?2b0e:619 logError @ vue.runtime.esm.js?2b0e:1884 globalHandleError @ vue.runtime.esm.js?2b0e:1879 handleError @ vue.runtime.esm.js?2b0e:1839 invokeWithErrorHandling @ vue.runtime.esm.js?2b0e:1862 invoker @ vue.runtime.esm.js?2b0e:2179 invokeWithErrorHandling @ vue.runtime.esm.js?2b0e:1854 Vue.$emit @ vue.runtime.esm.js?2b0e:3882 click @ VBtn.js?8336:75 invokeWithErrorHandling @ vue.runtime.esm.js?2b0e:1854 invoker @ vue.runtime.esm.js?2b0e:2179 original._wrapper @ vue.runtime.esm.js?2b0e:6911 Error: Cannot find module 'net' at webpackEmptyContext (eval at ./node_modules/defaultable sync recursive (app.js:3110), <anonymous>:2:10) at Object.workaround_require (defaultable.js?6987:49) at require (defaultable.js?6987:77) at eval (server.js?663d:9) at defaulter (defaultable.js?6987:83) at defaultable (defaultable.js?6987:63) at good (defaultable.js?6987:174) at Object.eval (server.js?663d:5) at eval (server.js:242) at Object../node_modules/hbo-dnsd/server.js (app.js:3704) logError @ vue.runtime.esm.js?2b0e:1888 globalHandleError @ vue.runtime.esm.js?2b0e:1879 handleError @ vue.runtime.esm.js?2b0e:1839 invokeWithErrorHandling @ vue.runtime.esm.js?2b0e:1862 invoker @ vue.runtime.esm.js?2b0e:2179 invokeWithErrorHandling @ vue.runtime.esm.js?2b0e:1854 Vue.$emit @ vue.runtime.esm.js?2b0e:3882 click @ VBtn.js?8336:75 invokeWithErrorHandling @ vue.runtime.esm.js?2b0e:1854 invoker @ vue.runtime.esm.js?2b0e:2179 original._wrapper @ vue.runtime.esm.js?2b0e:6911

該当のソースコード

vue

1//App.vue 2<template> 3 <v-app> 4 <v-content> 5 <v-btn small color="#66cdaa" @click="postgreSQL()">attack DBS!</v-btn> 6 </v-content> 7 </v-app> 8</template> 9 10<script> 11export default { 12 name: 'App', 13 components: { 14 }, 15 data () { 16 return { 17 } 18 }, 19 methods: { 20 postgreSQL: function () { 21 const pg = require('pg'); //この1行を読んだ時点でエラーが出る 22 const config = { 23 user: 'user-name', 24 host: 'test-pos.hogehoge.us-west-2.rds.amazonaws.com', 25 database: 'testPos', 26 password: 'testHogeHoge', 27 port: 5432, 28 ssl: true 29 }; 30 31 const client = new pg.Client(config); 32 33 client.connect(err => { 34 if (err){ 35 throw err; 36 } else { 37 this.queryDatabase(client); 38 } 39 }); 40 }, 41 42 queryDatabase: function(client) { 43 const query = ` 44 DROP TABLE IF EXISTS top_type; 45 46 CREATE TABLE top_type (type_id text, name text, "order" integer, "title" text); 47 INSERT INTO top_type (type_id, name, "order", "title") VALUES ('test', 'hoge1', 3, 'hey'); 48 INSERT INTO top_type (type_id, name, "order", "title") VALUES ('testxx', 'hoge2', 4, 'hello'); 49 `; 50 51 client.query(query) 52 .then(() => { 53 alert('Table created successfully'); 54 client.end(alert('Closed client connection')); 55 }) 56 .catch(err => alert(err)) 57 .then(() => { 58 alert('Finished execution'); 59 process.exit(); 60 }); 61 } 62 } 63} 64</script> 65

試したこと

他の部分をコメントアウトして試しましたが、どうやらconst pg = require('pg');の時点でエラーが発生しているようです。
該当の箇所をimport pg from 'pg';およびconst { Client } = require('pg');にしても動きませんでした。

補足情報(FW/ツールのバージョンなど)

vue cliは3.0($ vue create project-nameで導入)を使用しています。
PostgreSQLはawsに設置してあり、公開されています。

プラグイン・コンポーネントは以下の二種類を導入しています。
$ npm install pg
$ vue add vuetify

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

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

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

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

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

wtokuno

2019/04/15 05:04

その pg というモジュールはサーバーサイド(node.js)でしか動かないのでは?
jujujujujujuju

2019/04/15 06:09

そうみたいですね、、、nodeでのみ動くモジュールのようです。 フロントエンドでPostgreSQLを叩く方法をご存知であればご教授いただけませんか?
wtokuno

2019/04/15 06:15

知らないですね。 PostgreSQLのドライバの仕組みについて詳しいわけではないので憶測ですが、原理的に不可能だと思いますよ。 ブラウザのJavaScript実行環境は意図的にできることを制限されているので、 PostgreSQLと接続するためのプロトコルを実装できないんじゃないかなぁ。
jujujujujujuju

2019/04/15 14:46

なるほど、そこら辺の知識が壊滅的だったので参考になりました。 ありがとうございます!
guest

回答1

0

ベストアンサー

安全性の観点から言っても、フロントエンドから直接DBを叩くのはやめたほうがいいと思います。

バックエンドにDBとやり取りするAPIサーバーを立てて、フロントからはそのAPIを叩くことで間接的にデータを操作するのがベストだと思います。

APIサーバーへのアクセスはaxios等のモジュールがありますのでそちらをご参照ください。

投稿2019/04/15 08:41

FeLvi_zzz

総合スコア124

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

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

jujujujujujuju

2019/04/15 14:47

方針そのものがかなり危ないものだったみたいですね。 言われた方法で試してみます。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問