我正在设置我的第一个 Node 项目。我让所有页面都运行良好,直到我开始移动一些东西。我已经在 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;
登录.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,我似乎不明白为什么。
最佳答案
当你这样做时:
app.use('/login', login);
您告诉 Express 所有以 /login
开头的请求都应传递到“登录”路由器。
在该路由器中,您想要处理的任何 URL 都应该与 /login
前缀相关(这也在某种程度上解释了 here )。
换句话说,如果您想为 /login
本身添加处理程序,则需要添加以下内容:
router.get('/', function(req, res, next) { ... });
这也会给您带来一个问题,因为如果我理解正确的话,您还需要一个 /signup
的处理程序,您无法从已经带有 前缀的路由器创建该处理程序/登录
。在您的情况下,您的路由器正在为 /login/signup
创建处理程序。
您将需要一个单独的路由器来处理 /signup
,并将其附加到主应用程序,如下所示:
app.use('/signup', signup);
关于javascript - 某些路由会跳转到 404 错误页面 Express,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42328251/