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

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

詳細はこちら
EJS

EJSは、JavaScript用のテンプレートエンジン。HTMLなどのテンプレートテキストにJavaScriptのロジックを記述することができます。また、変数・関数の実行をテンプレートテキスト内に埋め込むことも可能です。

MySQL

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

Node.js

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

JavaScript

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

Express

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

Q&A

解決済

1回答

1613閲覧

Node.jsでページを切り替えることなく検索結果を表示したい

jsrookie

総合スコア24

EJS

EJSは、JavaScript用のテンプレートエンジン。HTMLなどのテンプレートテキストにJavaScriptのロジックを記述することができます。また、変数・関数の実行をテンプレートテキスト内に埋め込むことも可能です。

MySQL

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

Node.js

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

JavaScript

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

Express

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

0グッド

0クリップ

投稿2019/12/07 00:30

編集2019/12/07 03:57

フォームから検索し、検索結果を表示するようにしています。
そこで、ページを更新、切り替えることなく検索結果を表示したいのですが、上手くいきません。
何か方法があればご教授頂きたいです。
よろしくおねがいします。

Node.js + Express + EJS + MySQLです。

<body> <div role="main"> <form method="post" action="/hello/add" name="test"> <div> <input type="text" name="name" value="<%= form.name %>"> </div> <div> </td><input type="submit" value="検索"> </div> </form> </div> <div> <% if (mydata != null){ %> <p><ul> <li><%- mydata.id %></li> <li><%- mydata.attributes.name %></li> <li><%- mydata.attributes.comment %></li> </ul></p> <% } %> </div> </body>
var express = require('express'); var router = express.Router(); var mysql = require("mysql"); var knex = require("knex")({ dialect: "mysql", connection: { host : "localhost", user : "root", password : "", database : "db", charset : "utf8" } }); var Bookshelf = require("bookshelf")(knex); var MyData = Bookshelf.Model.extend({ tableName: "mydata" }); var mysql_setting = { host : "localhost", user : "root", password : "", database : "db" }; router.get("/add", (req, res, next) => { var data = { form: {name:""}, mydata: null, } res.render("hello/add", data); }); router.post('/add', (req, res, next) => { new MyData().where("name", "=", req.body.name).fetch().then((collection) => { var data = { form: req.body, mydata: collection, }; res.render("hello/add", data); }) }); module.exports = router;

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

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

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

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

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

AkitoshiManabe

2019/12/07 01:39

多くの方は NodeJS をサーバー側JavaScriptと認識しています(DOMの無い実行環境のため、ブラウザ側JavaScriptとは別物扱いします)。ブラウザ側の質問を含めるときは利用するフレームワーク名とテンプレートエンジン名も併記し、タグがあれば含めてください。
guest

回答1

0

ベストアンサー

何か方法があれば

Ajaxを使う案はどうでしょうか。

現状は次のようになっていて、必ずページ遷移が発生していると思います。

  1. ブラウザからURLのリクエストを受け付けたサーバー側JavaScript(NodeJS実装)はDBを検索。
  2. DB検索の結果に応じ、テンプレートエンジンで生成したHTML を応答(ブラウザが表示)

(検索結果を表示するときも同様のはずです)

Ajaxを用い、結果に応じてブラウザ側で動的にHTMLを書き換える方法になります。

  1. ブラウザ側が Ajaxでフォーム内容をサーバーにPOST要求。
  2. サーバー側は ブラウザからのPOST要求に応じ、DB検索した結果をJSONで応答する。
  3. 1.で Ajax実装が 2. の応答(JSON)に基づきDOM操作して書き換える。

この方法を取る案になります。

JavaScriptをサーバー側/ブラウザ側で分けて考える必要があります

ejs テンプレート内の

  • <%%> がサーバー側javascript.
  • script要素を記述すると(src属性で別ファイルを読ませてもいい)ブラウザ側javascript.

となるはずです。

ブラウザ側での Ajax や DOM操作による動的なHTMLの書き換えについては、
質問から外れますので、手順概要だけの回答とさせていただきます。

投稿2019/12/07 04:13

AkitoshiManabe

総合スコア5434

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

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

jsrookie

2019/12/08 05:07

回答ありがとうございます。 まだ私には難しそうですが、まずは1つずつ挑戦していきます。 その過程でまたご助言を頂けると幸いです。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問