某些路线转到404错误页面快递

时间:2017-02-19 14:12:56

标签: javascript node.js express

我正在设置我的第一个节点项目。我把所有页面都运行得很好,直到我开始移动一些东西。我已经为index.js中的不同页面完成了所有路由。我已经更改了它并在我的rotes文件夹中创建了一个login.js文件来分解一些逻辑。以前,所有网址都正常工作并正确显示页面。重构后,我一直在为所有登录路由找到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正在正确呈现主视图。其余路线,如/ login,或/ signup都将进入404,我似乎无法找出原因。

1 个答案:

答案 0 :(得分:2)

执行此操作时:

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

您告诉Express,所有以/login开头的请求都应该传递给“登录”路由器。

在该路由器中,您要处理的任何URL都应该与/login前缀相关(这也是有些解释here)。

换句话说,如果你想为/login本身添加一个处理程序,你需要添加它:

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

这也会给您带来一个问题,因为如果我理解正确,您还需要/signup的处理程序,您无法从已加/login前缀的路由器创建该处理程序。在您的情况下,您的路由器正在为/login/signup创建处理程序。

您将需要一个单独的路由器来处理/signup,并将其附加到主应用程序,如下所示:

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