2017-02-19 6 views
0

Я настраиваю свой первый проект узла. У меня были все страницы, которые хорошо работали, пока я не начал что-то перемещать. Я выполнил всю свою маршрутизацию для разных страниц в index.js. Я изменил это и создал файл login.js в моей папке rotes, чтобы разбить часть логики. Раньше все URL-адреса работали и отображали страницы правильно. Опубликовать рефакторинг, я продолжаю получать 404 страницы не найденных ошибок для всех маршрутов входа.Определенные маршруты перейти на страницу 404 error express

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; 

The index.js оказывает вид домашнего правильно. Остальные маршруты, такие как/login или/signup, все собираются в 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

На самом деле, поэтому у меня был другой вопрос ... если я попытаюсь перенаправить на другой ('/') маршрут, который я хочу быть только своим начальным экраном, я бы столкнулся с проблемами правильно? Например, если бы я хотел, чтобы моя регистрация перенаправить на/route, указанный в файле index.js, как бы я это сделал? – mufc

+0

@mufc redirection использует полное имя пути, поэтому вы можете использовать 'res.redirect ('/ signup')' (с любого маршрута). – robertklep

 Смежные вопросы

  • Нет связанных вопросов^_^