2017-02-19 73 views
0

我正在設置我的第一個節點項目。所有的頁面都很好地工作,直到我開始移動一些東西。我在index.js中爲不同頁面完成了所有路由。我已經改變了這一點,並在我的rotes文件夾中創建了一個login.js文件來分解一些邏輯。之前,所有的網址都正常工作並正確顯示網頁。發佈重構後,我一直在404頁面找不到所有登錄路由的錯誤。某些路由轉到404錯誤頁面快遞

app.js:

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

var routes = require('./routes/index'); 
var login = require('./routes/login'); 
//Using firebase initialized in config file. 
var database = require('./config/firebase'); 
var app = express(); 


///Setting stuff up here ..... 

app.use('/', routes); 
app.use('/login', login); 

app.use(function(req,res){ 
    res.status(404); 
    res.render('404'); 
}); 

module.exports = app; 

index.js:

var express = require('express'); 
var router = express.Router(); 
var csrf = require('csurf'); 
var csrfProtection = csrf(); 
var firebase = require('firebase'); 
var login = require('./login'); 


//tell express: All routes should be protected by csrf protection. 
router.use(csrfProtection); 

/* GET home page. */ 
router.get('/', function(req, res, next) { 
    res.render('home', { title: 'Express' }); 
}); 

module.exports = router; 

login.js:

var express = require('express'); 
var router = express.Router(); 
var csrf = require('csurf'); 
var csrfProtection = csrf(); 
//Using firebase initialized in config file. 
var database = require('../config/firebase'); 

router.use(csrfProtection); 

router.get('/login', function(req, res, next) { 
    res.render('login', { title: 'Login' }); 
}); 

router.get('/forgotpassword', function (req,res){ 
    res.render('forgotpassword', {title:'Forgot Password'}) 
}); 

//ADD A TERMS PAGE TO SHOW TERMS AND CONDITIONS 
router.get('/signup', function (req,res){ 
    res.render('signup', {title:'Sign up', csrfToken: req.csrfToken()}); 
}); 

router.post('/signup', function(req, res, next){ 
    res.redirect('/'); 
}); 

module.exports = router; 

index.js正確渲染主視圖。其他路線,如/登錄,或/註冊都將404,我似乎無法弄清楚爲什麼。

+0

的問題是'無功csrfProtection = CSRF();',您所呼叫的一個函數。而是嘗試'var csrfProtection = csrf;' – Hosar

回答

2

當你這樣做:

app.use('/login', login); 

你告訴表達開始/login所有請求應傳遞給「登錄」路由器。

在該路由器,任何URL是要處理應該是相對於/login前綴(這也是有些解釋here)。

換句話說,如果你想添加一個處理/login本身,你需要補充一點:

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

這也將提出你的問題,因爲如果我理解正確的話,你也想要一個/signup的處理程序,您無法從已經加上前綴/login的路由器創建該程序。在你的情況下,你的路由器正在爲/login/signup創建一個處理程序。

你將需要一個單獨的路由器來處理/signup,並將其連接到主應用程序是這樣的:

app.use('/signup', signup); 
+0

謝謝。這非常有幫助。對此還是新的,我錯過了這些事情是相對的。說得通。我很感激。 – mufc

+0

其實所以我有另一個關於問題...如果我然後嘗試重定向到另一個('/')路線,我想只是我的主屏幕,我會遇到問題是否正確?如果如果我想我的註冊重定向到index.js文件中指出的/ route,我該怎麼做? – mufc

+0

@ mufc重定向使用全路徑名,所以你可以使用'res.redirect('/ signup')'(從任何路線)。 – robertklep