前提・実現したいこと
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;
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/13 07:19
2018/05/13 07:35
2018/05/13 15:53