🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Node.js

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

Q&A

解決済

1回答

1047閲覧

Node.jsとMySQLを使ってデータの一覧表示をしたい

shirout

総合スコア36

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Node.js

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

0グッド

0クリップ

投稿2021/01/06 04:04

DBにproductsテーブルを作成しており、その中の値を画面に一覧表示したい
しかしproductsが見つからないとエラーが出て進まない
productsは指定しているはずなのですが、足らない記述などあれば教えていただきたいです

参考記事は以下
https://0forest.com/node-js-mysql/#%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E6%83%85%E5%A0%B1%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%A6%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8Bnodejs%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0

app.js

1const express = require('express'); 2const mysql = require('mysql'); 3const app = express(); 4 5const app = express(); 6 7const connection = mysql.createConnection({ 8 host: 'localhost', 9 user: 'root', 10 password: '', 11 database: 'node-test' 12}); 13 14connection.connect((err) => { 15 if (err) { 16 console.log('error connecting: ' + err.stack); 17 return; 18 } 19 console.log('success'); 20}); 21 22app.get('/', (req, res) => { 23 connection.query( 24 'SELECT * FROM products', 25 (error, results) => { 26 res.render('hello.ejs',{products: results}); 27 } 28 ); 29}); 30 31 32app.listen(3000);

hello.ejs

1<!DOCTYPE html> 2<html> 3 <head> 4 <meta charset="utf-8"> 5 <title>hello</title> 6 </head> 7 <body> 8 <ul> 9 <% products.forEach((product) => { %> 10 <li> 11 <div> 12 <span><%= product.id %></span> 13 <span><%= product.name %></span> 14 <span><%= product.price %></span> 15 </div> 16 </li> 17 <% }) %> 18 </ul> 19 </body> 20</html>
undefined ReferenceError: /Users/nagafuji/Desktop/node-test/views/hello.ejs:9 7| <body> 8| <ul> >> 9| <% products.forEach((product) => { %> 10| <li> 11| <div> 12| <span><%= product.id %></span> products is not defined at eval (/Users/nagafuji/Desktop/node-test/views/hello.ejs:12:8) at hello (/Users/nagafuji/Desktop/node-test/node_modules/ejs/lib/ejs.js:691:17) at tryHandleCache (/Users/nagafuji/Desktop/node-test/node_modules/ejs/lib/ejs.js:272:36) at View.exports.renderFile [as engine] (/Users/nagafuji/Desktop/node-test/node_modules/ejs/lib/ejs.js:489:10) at View.render (/Users/nagafuji/Desktop/node-test/node_modules/express/lib/view.js:135:8) at tryRender (/Users/nagafuji/Desktop/node-test/node_modules/express/lib/application.js:640:10) at Function.render (/Users/nagafuji/Desktop/node-test/node_modules/express/lib/application.js:592:3) at ServerResponse.render (/Users/nagafuji/Desktop/node-test/node_modules/express/lib/response.js:1012:7) at Query.<anonymous> (/Users/nagafuji/Desktop/node-test/app.js:26:11) at Query.<anonymous> (/Users/nagafuji/Desktop/node-test/node_modules/mysql/lib/Connection.js:526:10)

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/01/06 04:38

「DBにproductsテーブルを作成」したとき、どういうことをやりましたか? node.jsからrootユーザーで接続しようとしていますが、一般ユーザー的なユーザーは登録していないのでしょうか。
shirout

2021/01/06 04:52

sequel proで確認したところ、ユーザー名はrootで、パスワードは空になっておりました。 ターミナルにDBの値表示はできたので接続はできていると考えています。 ブラウザに表示ができないので原因が分からずに。。
hoshi-takanori

2021/01/06 05:36 編集

適当に products テーブルを作ってそのコードを動かしたらちゃんと表示されたので、データベース周りが怪しいですね。 app.get のところに引数 next を追加して app.get('/', (req, res, next) => { として、 res.render の前に if (error) { return next(error); } を追加すると SQL のエラーが表示されると思います。
shirout

2021/01/06 05:58

対応策ありがとうございます。 ご指摘の通り以下のように修正しました。 現在コードに誤りはないが、DBの設定などでミスを犯している可能性がある認識で間違い無いでしょうか? app.js app.get('/', (req, res, next) => { connection.query( 'SELECT * FROM products', (error, results) => { if (error) { return next(error); } res.render('hello.ejs',{products: results}); } ); }); コンソールエラー localhost/:1 Failed to load resource: the server responded with a status of 500 (Internal Server Error) ターミナルエラー undefined ReferenceError: /Users/nagafuji/Desktop/node-test/views/hello.ejs:9 7| <body> 8| <ul> >> 9| <% products.forEach((product) => { %> 10| <li> 11| <div> 12| <span><%= product.id %></span> products is not defined at eval (/Users/nagafuji/Desktop/node-test/views/hello.ejs:12:8) at hello (/Users/nagafuji/Desktop/node-test/node_modules/ejs/lib/ejs.js:691:17) at tryHandleCache (/Users/nagafuji/Desktop/node-test/node_modules/ejs/lib/ejs.js:272:36) at View.exports.renderFile [as engine] (/Users/nagafuji/Desktop/node-test/node_modules/ejs/lib/ejs.js:489:10) at View.render (/Users/nagafuji/Desktop/node-test/node_modules/express/lib/view.js:135:8) at tryRender (/Users/nagafuji/Desktop/node-test/node_modules/express/lib/application.js:640:10) at Function.render (/Users/nagafuji/Desktop/node-test/node_modules/express/lib/application.js:592:3) at ServerResponse.render (/Users/nagafuji/Desktop/node-test/node_modules/express/lib/response.js:1012:7) at Query.<anonymous> (/Users/nagafuji/Desktop/node-test/app.js:26:11) at Query.<anonymous> (/Users/nagafuji/Desktop/node-test/node_modules/mysql/lib/Connection.js:526:10)
hoshi-takanori

2021/01/06 06:46 編集

あれ? DB のエラーは出ませんね。というか、results が undefined だったら別のエラーになりますね。 ってことは、hello.ejs で products を受け取れてないようですが、ちゃんと指定してるのに…。 念のために確認しますが、app.js を書き換えたらサーバー再起動してますか?
shirout

2021/01/11 04:12

お返事遅れて申し訳ございません。 本当にありがとうございます。 mysql.server startとnode app.jsで再起動することで解決しました。 app.jsを書き換えたらnode app.jsを必ずやらないといけないのですね。 勉強になりました。
guest

回答1

0

自己解決

app.jsを書き換えた後にサーバーを再起動することで解決しました。

ターミナルでnode app.jsとコマンドを打つことで解決。

投稿2021/01/11 04:13

shirout

総合スコア36

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問