2017-11-17 9 views
0

私は基本的なユーザー入力データを取る明示的なアプリケーションを持っています。私のルートはすべて正常に動作しますが、サーバーに投稿要求を送信すると、私のビューフォルダにこのページがあるのに私が投稿しているURLに404が表示されます。エクスプレスでサーバーに投稿できません

app.js:

var express = require('express'); 
var path = require('path'); 
var consolidate = require('consolidate'); 
var bodyParser = require('body-parser'); 
var database = require('./database/database'); 
var Patient = require('./models/models').Patient; 
var morgan = require('morgan'); 
var routes = require('./routes'); 
var app = express(); 

app.engine('html', consolidate.nunjucks); 

app.set('view engine', 'html'); 
app.set('views', './views'); 

app.use(morgan('dev')); 
//app.use(app.router); 
app.use(routes); 

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

app.listen(3055); 

module.exports = app; 

ルート/ index.js:

const express = require('express'); 
var bodyParser = require('body-parser'); 
var Patient = require('../models/models').Patient; 
const router = express.Router(); 

router.get('/', function(req, res, next){ 
    res.render('index.html'); 
}); 

router.post('/addsubject', function(req, res, next){ 
    Patient.create(req.body).then(function(patient){ 
     res.redirect('/profile'); 
    }).catch(function(err){ 
     if(error.name === "SequelizeValidationError"){ 
     } else { 
     return next(err); 
     } 
    }).catch(function(error){ 
     res.send(500, error); 
    }); 
}); 

router.get('/profile', function(req, res, next){ 
    res.render('./profile.html'); 
}); 

router.get('/addsubject', function(req, res, next){ 
    // .... do something here .. 
}); 

module.exports = router; 

私は私のindex.htmlファイルに<form action="/addsubject" method="post">を持っています。

のindex.html:

<!doctype html> 
<html lang="en"> 
    <head> 
    <meta charset="utf-8"> 
    <title>dabl Demographic</title> 
    <body> 
    <h2>Add Subject</h2> 
     <form action="/addsubject" method="post"> 
     <label for="fname">First Name: </label> 
     <input type="text" name="fname" id="fname"> 
     <br> 
     <label for="sname">Second Name: </label> 
     <input type="text" name="sname" id="sname"> 
     <br> 
     <label for="dob">dob: </label> 
     <input type="text" name="dob" id="dob"> 
     <br> 
     <label for="laterality">Laterality: </label> 
     <input type="text" name="laterality" id="laterality"> 
     <br> 
     <button>Submit</button> 
     </form> 
    </body> 
</html> 
+0

完全なindex.htmlまたはフォームコンテンツを共有できますか? – agit

+0

はい、1秒更新します – Donal5

+0

'router.post'は最初のコールバックパラメータとしてエラーを受け取りますか? –

答えて

1

app.router前には、あなたはPOSTルートに誤った機能(エラー処理機能)を渡します。

はちょうどこのような関数から最初の「誤る」のparamを削除します。

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

完了getti ng a 404 – Donal5

+1

appをデバッグして、コントローラの最初の行(「Patient.create」を開始する行)にブレーキポイントを設定すると、ルートに触れるとそのブレーキポイントに移動しますか? "SequelizeValidationError"を捕まえた後に何もしないという別の問題が考えられます。いくつかのErrorオブジェクトインスタンスでnext(err)を渡す必要があります。 – Tomas

1

使用body-parserミドルウェア

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

app.use(morgan('dev')); 
//app.use(app.router); 
app.use(routes); 
... 
+0

私はそれを試みて、私はまだ404を得ています – Donal5

+1

私は言うことを忘れてしまいました。 'router.post( '/ addsubject'、function(err、req、res、next)..' – agit

+1

@ Donal5私のenvであなたのコードを実行でき、 'router.post( '/ addsubject')にフォームデータを取得できます。 'ミドルウェア、私は問題があなたの' Patient.create(req.body) 'セクションにあると思います。おそらくあなたは' err'の詳細を確認する必要があります – agit

0

問題が解決:

}).catch(function(err){ 
     if(error.name === "SequelizeValidationError"){ 
      next(err); //next(err); called inide this block no more 404 error 
     } 

ユーザ入力は現在正常にボディパーサーを通過します。

関連する問題