2016-06-09 5 views
-1

Immer wenn ich versuche, aus dem Index zu übermitteln, erhalte ich einen Fehler. Ich versuche, die Werte von den Benutzernamen und Passworteingaben zu erhalten.nodejs Fehler 404 auf Post (nicht via URL)

sollte dies der Code sein, um die Post zu handhaben:

app.post('/', function(req, res){ 
    var username=req.body.username; 
    var password=req.body.password; 
    res.render("the username and password you posted:" +password+username); 
    }); 

mein app.js

var express = require('express'); 
var path = require('path'); 
var favicon = require('serve-favicon'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 

var routes = require('./routes/index'); 
var users = require('./routes/users'); 
var patienten = require('./routes/patienten'); 
var form = require('./routes/form'); 

var app = express(); 

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

// uncomment after placing your favicon in /public 
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: true })); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 
app.use(bodyParser.json()); 

app.use('/', routes); 
app.use('/users', users); 
app.use('/patienten', patienten); 
app.use('/form', form); 

// catch 404 and forward to error handler 
app.use(function(req, res, next) { 
    var err = new Error('Not Found'); 
    err.status = 404; 
    next(err); 
}); 

app.get("/", function(req, res) { 
    res.send("i am from /get"); 
}); 

app.get("/", function(req, res){ 
    res.sendfile("/"); 
}); 
app.post('/', function(req, res){ 
    var username=req.body.username; 
    var password=req.body.password; 
    res.render("the username and password you posted:" +password+username); 
}); 

// development error handler 
// will print stacktrace 
if (app.get('env') === 'development') { 
    app.use(function(err, req, res, next) { 
    res.status(err.status || 500); 
    res.render('error', { 
     message: err.message, 
     error: err 
    }); 
    }); 
} 
// production error handler 
// no stacktraces leaked to user 
app.use(function(err, req, res, next) { 
    res.status(err.status || 500); 
    res.render('error', { 
    message: err.message, 
    error: {} 
    }); 
}); 


module.exports = app; 

Die form.js

var express = require('express'); 
var router = express.Router(); 
var mysqlModel = require('mysql-model'); 
var request = require('request'); 
var ejs = require('querystring'); 

/* GET home page. */ 
router.get('/form', function(req, res) { 
    res.render('form', { 
     title: 'EPD - Login', 
    }); 
}); 

module.exports = router; 

Die form.ejs (der einreichen Seite)

<!DOCTYPE html> 
<html> 
    <head> 
    <title><%= title %></title> 
    <link rel='stylesheet' href='/stylesheets/style.css' /> 
    </head> 
    <body> 
    <form action="/" method="GET"> 
<input type="text" name="username"> 
     <input type="password" name="password"> 
     <input type="submit" name="submit" value="gogo"> 
    </form> 
    </body> 
</html> 

Antwort

0

Sie verwenden res.render() nicht für regelmäßige Antworten zurück zum Client. Verwenden Sie stattdessen res.send(). Aus diesem Grund erhalten Sie Ihren Fehler. res.render() wird in Express mit einer View-Engine verwendet und sendet die gerenderte Ansichtsvorlage an den Client zurück. IE ejs in diesem Fall ist die Ansicht Motor definiert und das ist, was der folgende Code

// view engine setup 
// Tells express to render from the views directory 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'ejs'); 

Ihre 404 Handler tut sollte Ihren zweiter zur letzten Strecke in Ihrer ausdrücklichen Haupt-Datei sein, da es ein Haken aller für jeder ist Routen, die nicht Ihren definierten Routen entsprechen seit Express geht durch Routen Top-Down. Zusammen mit Ihrem 404-Handler, der an der falschen Stelle in Ihrer Express-App definiert ist, sollten Sie mögliche Kollisionen mit Ihren Routen untersuchen.

Sie haben die folgende Router-Middleware

app.use('/', routes);

und dann anschließend die folgende Route planen

app.get("/", function(req, res) { 
    res.send("i am from /get"); 
}); 

auf den Inhalt Ihrer routes Datei Je könnte es Kollisionen sein und die app.get() wird nie ausgeführt werden.

Sie sollten Ihre Routen wie folgt festgelegt:

app.use('/', routes); 
app.use('/users', users); 
app.use('/patienten', patienten); 
app.use('/form', form); 

// If you have a GET inside your 'routes' file 
// from above, then this may never get called if 
// it also contains a route for GET '/' 
app.get("/", function(req, res) { 
    console.log('I am from get'); 
    return res.render('index'); 
}); 


// My comment from above about your GET '/' would 
// also apply to this POST route 
app.post('/', function(req, res){ 
    var username=req.body.username; 
    var password=req.body.password; 
    return res.status(200).send("the username and password you posted: " + password + ' ' + username); 
}); 

// catch 404 and forward to error handler 
app.use(function(req, res, next) { 
    var err = new Error('Not Found'); 
    err.status = 404; 
    return next(err); 
}); 

// development error handler 
// will print stacktrace 
if (app.get('env') === 'development') { 
    app.use(function(err, req, res, next) { 
    res.status(err.status || 500); 
    return res.render('error', { 
     message: err.message, 
     error: err 
    }); 
    }); 
} 
// production error handler 
// no stacktraces leaked to user 
app.use(function(err, req, res, next) { 
    res.status(err.status || 500); 
    return res.render('error', { 
    message: err.message, 
    error: {} 
    }); 
}); 

Sie auch HTTP MethodGET-POST

in Ihrer form.ejs Datei angegeben Ihre ändern benötigen, um

<form action="/" method="POST">

+0

Vielen Dank, Sie haben mich gerettet! : _) –

0

Diese Middleware für Umgang mit Ihrem 404, sollte nach Ihrer letzten Route platziert werden. Andernfalls werden nach Ihrem Code alle Treffer zurückgegeben 404.

// catch 404 and forward to error handler 
app.use(function(req, res, next) { 
    var err = new Error('Not Found'); 
    err.status = 404; 
    next(err); 
}); 

Außerdem Ihre Form sollte POST-Anfrage GET nicht

<form action="/" method="POST"> 

auch senden, wird res.render verwendet, um einen Blick zu machen. Sie können res.send oder res.json nach Belieben verwenden.

+0

Und danke an;) –