##前提・実現したいこと
Node.jsとExpressを使用したサイトを作成しています。
/registerというパスにあるフォームに入力した値を取得し/homeというパスのページに表示する予定です。
Postメソッドを利用して入力した値を取得するのだと思うのですが、調べても実装してもうまくいかず、アドバイスをいただきたいです。
よろしくお願いたします。
##試したこと①
・ドットインストールのExpress講座、Expressの公式ドキュメント(https://expressjs.com/en/guide/routing.html)を参考に実装
・app.js
'use strict' const path = require('path'); const express = require('express'); const app = express(); //POSTのミドルウェア app.use(express.json()); app.use(express.urlencoded()); //テンプレートエンジンの設定 const viewsPath = path.join(__dirname, './views') const publicDirectoryPath = path.join(__dirname, './public') app.set('view engine', 'ejs'); app.set('views', viewsPath) app.use(express.static(publicDirectoryPath)); app.get('/register', (req, res) => { res.render('./register.ejs') }); app.get('/home', (req, res) => { res.render('./home.ejs') }); app.post('/home', (req, res)=>{ res.send(req.body.username); }) app.listen(3001, () => { console.log('server is up on port 3001') })
・register.ejs(フォームの箇所)
<form action="/home" method="post"> <dl> <dt>Name: </dt> <dd><input type="text" id="name" name="username"></dd> <dt>E-Mail Address: </dt> <dd><input type="text" id="email"></dd> <dt>Password: </dt> <dd><input type="password" id="password"></dd> <dt>Confirm Password: </dt> <dd><input type="password" id="passConfirm"></dd> </dl> </form>
結果
画面遷移しても、usernameの値が/homeの画面に反映されない。
Console, Morgan に動きなし
##試したこと②
【初心者でもOK】Node+Expressで簡単なフォームを実装!(https://qiita.com/watsuyo_2/items/327b74d68f921dbdd524)を参考に実装
・app.js
'use strict' const path = require('path'); const express = require('express'); const app = express(); const router = express.Router(); //POSTのミドルウェア app.use(express.json()); app.use(express.urlencoded()); //テンプレートエンジンの設定 const viewsPath = path.join(__dirname, './views') const publicDirectoryPath = path.join(__dirname, './public') app.set('view engine', 'ejs'); app.set('views', viewsPath) app.use(express.static(publicDirectoryPath)); app.use(morgan({format: 'dev', immediate: true})); router.get('/register', (req, res, next) => { res.render('./register.ejs') }); router.post('/home', (req, res) => { var name = req.body['username']; var data = { username: name } res.render('./home.ejs') }); app.listen(3001, () => { console.log('server is up on port 3001') })
結果
/registerにアクセスすると、
Cannot GET /register
というエラーが出てしまう
##試したこと③
試したこと③
Node.js: request モジュールを使って POST リクエストを行う(https://blog.sarabande.jp/post/52117191060)
こちらのサイトで紹介されているように
var options = {
uri: 'http://localhost:9000/',
form: { name: 'テストユーザー' },
json: true
};
という形で/homeに引き渡す情報を書くのかとも思ったのですが、
/registerに入力された情報の反映方法が分からず止まってしまっております。
よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー