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

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

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

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

ルーティング

ルーティングとは、TCP/IPネットワークにおいて、目的のホストまでパケットを送る為のパス選定のプロセスを言います。

Express

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

Q&A

1回答

1012閲覧

express.js で同じサイト内の2つのルートパス(route path)から post でルーティングがある場合

trgw

総合スコア26

Node.js

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

ルーティング

ルーティングとは、TCP/IPネットワークにおいて、目的のホストまでパケットを送る為のパス選定のプロセスを言います。

Express

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

0グッド

0クリップ

投稿2020/11/11 09:55

編集2020/11/14 00:18

express.js で同じサイト内の2つのルートパス(ルートページ)から post でルーティングがある場合書き方が分かりません。

JavaScript

1router.post('/', function(req, res, next) { 2 // /routePath0 から来た場合 3 if (/* from routePath0 */) { 4 res.render('index', {...} 5 } /* /routePath1 から来た場合 */ else if (/* from routePath1 */) { 6 res.render('index', {....} 7 } else { 8 console.log('Error message') 9 } 10});

といったようになるのでしょうか?

編集:path → routePath

if で分岐するとしたら、各 post で送られてくる
req.body.hoge
req.body.hoge1
で場合分けでしょうか。

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

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

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

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

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

guest

回答1

0

それを例えるならば、
Yahooの検索エンジンから訪れたユーザーAと、
Googleの検索エンジンから訪れたユーザーBが
自分の開設しているWebサーバのPATH「/index.html」に訪れました。

このユーザーAとユーザーBを判別して別の挙動をしたり、
別のHTMLを返したいといった感じの事を言っているのでしょうか?
(今回の質問はそれの1個のWebサイト上の別々のページ・GETかPOSTかの違いはありますが)


もしそうなら、質問文の内容で実現は出来ますがオススメ出来ません。

Webサイトを閲覧する時、
Chrome等のブラウザでリンクをクリックする等して別のページへ遷移した時、
HTTPリクエストという要求をサーバへ送信します。
そのリクエスト内容のヘッダー部にリファラという項目があり、
それを見る事でこのユーザーの1個前のページを判別することが可能です。

Express.jsのドキュメントを読んだ所、
リファラの入っているHTTPリクエストヘッダーはreq.getでアクセスすることが可能で、
Referrerという項目にリファラが入っているようです。

ただし、リファラは自己申告でいくらでも詐称し放題です。
それにこの挙動はRESTの原則にも反しており、
良いね!やろう!と言ってくれる既存Webエンジニアは殆どいません。

参考記事: RESTfulとは

まぁ習作として試しに作ってみるのは全然良いと思います。


RESTの流れを汲みながら実装する場合、
POSTでアクセス可能なページを2個払い出して、
AページからPOST-A、BページからはPOST-Bになるようにした方が良い設計となります。

質問文のコードを借りるならこんなイメージ

js

1router.post('/path0', function(req, res, next) { 2 res.render('index', {...}) 3}); 4router.post('/path1', function(req, res, next) { 5 res.render('index', {...}) 6});

投稿2020/11/11 10:40

miyabi-sun

総合スコア21203

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

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

trgw

2020/11/12 01:58 編集

初心者なので間違えているかもしれませんが、このコードですと、path0 'に' 来た時 res.render (res.render0とします)で index.ejs(html) を投げる、path1 'に' 来た時 res.render1 で index.ejs(html) を投げるということになるでしょうか? また、このコードを書く場所としては app.js になるでしょうか? そうではなくて、path0 からの post request には対応0(res.render0)を、path1 からの post request には対応1(res.render1)を、とする場合にはどうなるでしょうか。 index page を2つ名前を変えてつくるしかないということでしょうか。 理解と説明が拙くてすみません、、
trgw

2020/11/12 01:59 編集

[間違え]
miyabi-sun

2020/11/12 02:19

ejs等のHTMLテンプレートには変数が存在します。 これにより一つのejsファイルから複数パターンのHTMLを生成できます。 https://qiita.com/kamihork/items/1b13d2157979d1837849 これを利用して、 POST通信を行う一つ前のページで、/path0のページをレンダリングする時に `res.render("index.ejs", {post: "/path0"});`等とejsの変数を設定しておきます。 index.ejsでPOST通信を行う為にform要素を使うのであれば、 `<form action="<%= post %>">` こんな感じにすればいけます
trgw

2020/11/12 23:59

同じサイト内からのページの遷移なのですが、いかがでしょうか。 path0 のページから来た時と path1 のページから来た時の処理が異なる、という場合です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問