某些路线转到404错误页面快递 [英] Certain routes go to 404 error page express
问题描述
我正在设置我的第一个节点项目.在开始移动某些内容之前,我所有的页面都运行良好.我已经为 index.js
中的不同页面完成了所有路由.我已经进行了更改,并在我的rotes文件夹中创建了一个 login.js
文件,以分解一些逻辑.以前,所有网址都可以正常工作并正确显示页面.重构后,对于所有登录路径,我一直收到404页面未找到的错误.
I am setting up my first node project. I had all the pages working nicely until I started to move some thing around. I have done all of my routing for different pages in index.js
. I have changed that and created a login.js
file within my rotes folder to break up some of the logic. Before, all urls were working and displaying pages correctly. Post refactoring, I keep getting 404 page not found errors for all of the login routes.
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,我似乎无法弄清楚为什么.
The index.js
is rendering the home view properly. Rest of the routes, like /login, or /signup are all going to 404 and I can't seem to figure out why.
推荐答案
执行此操作时:
app.use('/login', login);
您要告诉Express,所有以/login
开头的请求都应传递到登录"路由器.
You're telling Express that all requests starting with /login
should be passed to the "login" router.
在该路由器中,您要处理的任何URL均应相对于该/login
前缀(这也是有点解释,
In that router, any URL's that you want to handle should be relative to that /login
prefix (this is also somewhat explained here).
换句话说,如果要为/login
本身添加处理程序,则需要添加以下内容:
In other words, if you want to add a handler for /login
itself, you need to add this:
router.get('/', function(req, res, next) { ... });
这也会给您带来一个问题,因为如果我对您的理解正确,那么您还需要一个用于/signup
的处理程序,您无法从已经以为前缀的路由器中创建该处理程序/login
.就您而言,您的路由器正在为/login/signup
创建一个处理程序.
This will also present an issue for you, because if I understand you correctly, you also want a handler for /signup
, which you cannot create from a router that is already prefixed with /login
. In your case, your router is creating a handler for /login/signup
.
您将需要一个单独的路由器来处理/signup
,并将其附加到主应用中,如下所示:
You're going to need a separate router to handle /signup
, and attach it to the main app like this:
app.use('/signup', signup);
这篇关于某些路线转到404错误页面快递的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!