2017-11-17 6 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 행 노선의 잘못된 기능 (오류 처리 기능)을 전달합니다.

다만 이런 함수로부터 제 "Err"가 PARAM 제거 :

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

완료 됨 getti ng a 404 – Donal5

+1

앱을 디버그하고 브레이크 포인트를 컨트롤러의 첫 번째 라인 ("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

나는 btw가 err을 제거하는 것을 깜빡했다. '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 
     } 

사용자 입력은 이제 성공적으로 체내 파서를 통과한다.