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

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

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

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

Express

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

Q&A

解決済

1回答

6374閲覧

ExpressでPOSTされてきた値を取得する方法について

tmykndr

総合スコア74

Node.js

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

Express

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

0グッド

1クリップ

投稿2018/05/12 17:49

前提・実現したいこと

node.js + Expressをインストールして勉強しているNode初心者です。
Expressを使ってpostされてきた値を取得する方法で、気になることがあったのでご回答いただけたら嬉しいです。

Express-generatorを使って作業ディレクトリを作りましたが、落ちてきたファイルのソースを見たときにapp.jsにもindex.jsにもbodyParser()をrequireしている箇所が見当たりません。
package-lock.jsonには"body-parser"の記述があることは確認しました。

ポスト値が取れるかテストコードを書いて、ブラウザからpostしたところreq.bodyプロパティで問題なくpost値を取得できたのですが、bodyParser()をapp.jsやindex.jsでrequireしていないのに値が取れるのはなぜでしょうか。

テストコードは以下を作成しました。
index.ejsで簡易フォーム作成
/indexにアクセス来たらindex.jsのミドルウェアを実行
/resultにpost送信したらresult.jsのミドルウェアを実行
app.jsで各マウントポイントにミドルウェアをマウント

回答してくださる方がいましたら、よろしくお願いいたします。

該当のソースコード

index.ejs

<form action="/result" method="post"> <input type="text" name="name" placeholder="name"> <input type="text" name="age" placeholder="age"> <input type="submit" value="送信"> </form>

index.js

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', {
title: 'Hello Node.js'
});
});

module.exports = router;


result.js

var express = require('express');
var router = express.Router();

router.post('/', function(req, res, next) {

var name;
var age;

name = req.body.name;
age = req.body.age;

res.render('result', {title: 'Hello Node.js',name: name, age: age });
});

module.exports = router;


app.js

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

var indexRouter = require('./routes/index');
var resultRouter = require('./routes/result');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/result', resultRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};

// render the error page
res.status(err.status || 500);
res.render('error');
});

module.exports = app;

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

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

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

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

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

guest

回答1

0

ベストアンサー

js

app.use(express.json());
app.use(express.urlencoded({ extended: false }));

これがそれです。 [express.json - Express](http://expressjs.com/en/4x/api.html#express.json) [express.urlencoded - Express](http://expressjs.com/en/4x/api.html#express.urlencoded) > This is a built-in middleware function in Express. It parses incoming requests with JSON payloads and is based on body-parser.   > This is a built-in middleware function in Express. It parses incoming requests with urlencoded payloads and is based on body-parser. body-parserをベースにしていると書いてあります。package-lock.jsonにbody-parserが入っているのもそのためです。

投稿2018/05/13 00:52

karamarimo

総合スコア2551

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

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

sousuke

2018/05/13 07:19

いつの間にかexpressのbody-perser消えてたから自分も「ん?」ってなってた、ありがとう。 でも確か記憶じゃexpress4になった時にexpressと分離したって話だったような…
tmykndr

2018/05/13 15:53

回答いただきありがとうございます!!すごく分かりやすいです。 悩んでいたのでとても助かりました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問