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

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

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

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

Node.js

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

コンパイル

コンパイルとは、プログラミング言語のテキストソース(ソースコード)をコンピュータ上で実行可能な形式(オブジェクトコード)に変換することをいいます

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

解決済

1回答

1308閲覧

Node.jsでテーブルが未定義になってしまいます

lemona4e

総合スコア2

MySQL

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

Node.js

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

コンパイル

コンパイルとは、プログラミング言語のテキストソース(ソースコード)をコンピュータ上で実行可能な形式(オブジェクトコード)に変換することをいいます

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

1クリップ

投稿2021/04/05 04:10

編集2021/04/06 12:02

Node.jsで簡単なクローンアプリを作っています。エラーになってしまうため、jobs未定義の修正場所と方法を教えていただきたいです。

ReferenceError: /Users/Desktop/Node.js/Recruit/views/top.ejs:70 68| </div> 69| </li> >> 70| <% jobs.forEach((job) => { %> 71| <li class="job"><div class="job-title"><%= job.title %></div> 72| <p><img src="/images/list3.jpeg" alt="3"></p> 73| <p><%= job.point %></p> jobs is not defined at eval (eval at compile (/Users/Desktop/Node.js/Recruit/node_modules/ejs/lib/ejs.js:662:12), <anonymous>:12:8) at top (/Users/Desktop/Node.js/Recruit/node_modules/ejs/lib/ejs.js:692:17) at tryHandleCache (/Users/Desktop/Node.js/Recruit/node_modules/ejs/lib/ejs.js:272:36) at View.exports.renderFile [as engine] (/Users/Desktop/Node.js/Recruit/node_modules/ejs/lib/ejs.js:489:10) at View.render (/Users/Desktop/Node.js/Recruit/node_modules/express/lib/view.js:135:8) at tryRender (/Users/Desktop/Node.js/Recruit/node_modules/express/lib/application.js:640:10) at Function.render (/Users/Desktop/Node.js/Recruit/node_modules/express/lib/application.js:592:3) at ServerResponse.render (/Users/Desktop/Node.js/Recruit/node_modules/express/lib/response.js:1012:7) at /Users/Desktop/Node.js/Recruit/app.js:8:7 at Layer.handle [as handle_request] (/Users/Desktop/Node.js/Recruit/node_modules/express/lib/router/layer.js:95:5) ```データベースで以下のように値を入れました。

mysql> DESCRIBE jobs;
+----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| title | char(70) | YES | | NULL | |
| point | varchar(50) | YES | | NULL | |
| contents | varchar(500) | YES | | NULL | |
+----------+--------------+------+-----+---------+----------------+
4 rows in set (0.02 sec)

mysql> INSERT INTO jobs(title, point, contents) VALUES('タイトル', 'ポイント', '募集しています');
Query OK, 1 row affected (0.02 sec)

mysql> SELECT * FROM jobs;
+----+--------------+--------------+-----------------------+
| id | title | point | contents |
+----+--------------+--------------+-----------------------+
| 1 | タイトル | ポイント | 募集しています |
+----+--------------+--------------+-----------------------+
1 row in set (0.00 sec)

mysql>

(追記2)修正済みです。回答欄で流れを確認できます。 ```js const express = require('express'); const mysql = require('mysql'); const app = express(); app.use(express.static('public')); app.use(express.urlencoded({extended: false})); const connection = mysql.createConnection({ host: 'localhost', user: 'root', password: '', database: 'Recruit' }); app.get('/', (req, res) => { res.render('top.ejs'); }); app.get('/job', (req, res) => { connection.query( 'SELECT * FROM jobs', (error, results) => { res.render('job.ejs', { jobs: results }); } ); }); app.get('/content/:id', (req, res) => { const id = req.params.id; connection.query( 'SELECT * FROM jobs WHERE id = ?', [id], (error, results) => { res.render('content.ejs', { job: results[0] }); } ); }); app.listen(4090);

ejs

1<!DOCTYPE html> 2<html> 3 <head> 4 <meta charset="utf-8"> 5 <title>Recruit</title> 6 <link rel="stylesheet" href="/css/style.css"> 7 <script src="/send_url.js"></script> 8 </head> 9 <body> 10 <header> 11 <li><a href="/job">求人</a></li> 12 </header> 13 <main> 14 <ul> 15 <% jobs.forEach((job) => { %> 16 <li class="job"><div class="job-title"><%= job.title %></div> 17 <p><img src="/images/list3.jpeg" alt="3"></p> 18 <p><%= job.point %></p> 19 <button><a href="/content/<%= job.id %>">詳細を見る</a></button> 20 </li> 21 <% )} %> 22 </ul> 23 </main> 24 <%- include('footer'); %> 25 </body> 26</html> 27```よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

エラーメッセージにjobsが未定義ですと書かれています。
レンダラにjobsを渡し忘れているか、渡したjobsが未定義であるかのどちらかです。

※追記
top.ejsにjobsが渡されていません。

javascript

1app.get('/', (req, res) => { 2 res.render('top.ejs'); 3 });

job.ejsにはちゃんと必要な値を渡せているので、やり方については解説は要りませんよね?

投稿2021/04/05 05:08

編集2021/04/06 07:43
AT_2nd

総合スコア266

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

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

lemona4e

2021/04/05 05:18

ご回答ありがとうございます。そのどちらかの場合の確認方法と修正方法も教えていただけますと嬉しいです。
AT_2nd

2021/04/05 05:24

それに回答するには、まずソースを提示して下さい。
lemona4e

2021/04/06 12:03 編集

質問を編集いたしました。どうぞよろしくお願いいたします。
lemona4e

2021/04/06 11:47

content.ejsを追加し、job.ejsがcontent.ejs、top.ejsがjob.ejsになりましたが、追記のご指摘の通りjobsを渡すと、実行することができました!!ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問