2017-11-17 2 views
0

posten Ich habe eine Express-App, die grundlegende Benutzereingabedaten nimmt. Alle meine Routen funktionieren gut, aber wenn Sie eine Post-Anfrage an den Server senden, bekomme ich eine 404 auf der URL, auf die ich poste, obwohl ich diese Seite in meinem View-Ordner habe.Kann nicht auf einen Server in Express

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; 

Routen/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; 

ich die <form action="/addsubject" method="post"> in meiner Datei index.html haben.

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

Kann Ihre vollständige index.html oder Formular Inhalt teilen? – agit

+0

Ja, eine Sekunde werde ich aktualisieren – Donal5

+0

Sind Sie sicher, dass 'router.post' einen Fehler als ersten Callback-Parameter akzeptiert? –

Antwort

1

Sie passieren falsche Funktion (Fehlerbehandlung Funktion) auf die POST-Route.

Entfernen Sie einfach zuerst "err" param aus der Funktion wie folgt aus:

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

Getan noch getti ng a 404 – Donal5

+1

Wenn Sie App debuggen und Bremspunkt in die erste Zeile des Controllers legen (Zeile, die "Patient.create" startet), kommen Sie zu diesem Bremspunkt, wenn Sie die Route berühren? Ich sehe ein anderes mögliches Problem, dass Sie nichts tun, nachdem Sie den "SequelizeValidationError" abgefangen haben. Sie sollten als nächstes (err) mit einer Fehlerobjektinstanz übergeben werden. – Tomas

1

Verwenden body-parser Middleware vor app.router

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

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

Ich habe das versucht und ich bekomme immer noch eine 404 – Donal5

+1

Ich habe vergessen zu sagen, BTW entfernen Fehler aus 'router.post ('/ addsubject', Funktion (err, req, res, next) ..' – agit

+1

@ Donal5 Ich kann deinen Code in meinem env ausführen und kann Formulardaten in 'router.post ('/ addsubject') bekommen. . 'Middleware, ich denke, Problem ist in Ihrem 'Patient.create (req.body)' Abschnitt. wahrscheinlich müssen Sie 'err' Details überprüfen – agit

0

Problem gelöst:

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

Benutzereingabe wird nun erfolgreich durch den Körper-Parser übergeben.

Verwandte Themen