2016-06-09 48 views
-1

每當我嘗試從索引提交我得到一個錯誤。 即時通訊嘗試從用戶名和密碼輸入中獲取值。nodejs錯誤404(不通過網址)

這應該是處理後的代碼:

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); 
    }); 

我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; 

的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; 

的form.ejs(提交頁)

<!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> 

回答

0

您不會使用res.render()作爲定期回覆給客戶的回覆。改爲使用res.send()。這就是爲什麼你收到你的錯誤。 res.render()用於Express中的視圖引擎,並將呈現的視圖模板發送回客戶端。 IE ejs在這種情況下所定義的視圖引擎和多數民衆贊成什麼,下面的代碼是做

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

404處理程序應該是你第二次到最後的路線在您的明確主文件,因爲它是一個包羅萬象所有任何路由與您定義的路由不匹配因爲Express通過路由自上而下。隨着您的快遞應用程序中您的404處理程序被定義在錯誤的位置,您應該檢查可能與您的路線發生衝突。

您有以下路由器中間件

app.use('/', routes);

,隨後下面GET路線

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

根據您routes文件的內容可能會有衝突和app.get()永遠被執行。

你應該設置你的路由,如下所示:

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: {} 
    }); 
}); 

您還需要您的HTTP MethodGETform.ejs文件中指定更改爲POST

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

+0

非常感謝,你救了我! :_) –

0

該中間件處理你的404,應該放在你最後一次路線之後。 否則根據你的代碼,你所有的命中將返回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); 
}); 

此外,您的表單應發送POST請求沒有得到

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

而且,使用res.render渲染視圖。您可以根據需要使用res.send或res.json。

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

並感謝您;) –