javascript - 某些路由会跳转到 404 错误页面 Express

标签 javascript node.js express

我正在设置我的第一个 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/

相关文章:

javascript - filter(String) 也返回数字

javascript - 如何在 PHP 中运行 JS?

node.js - NodeJS Express - 分别处理 404(未找到)和 405(不允许的方法)

javascript - 阻止公众访问 expressjs 应用程序

javascript - NodeJS - 将每个 HTTP 请求的 session 数据存储在 "global"变量中

javascript - Gulp 缩小 CSS

javascript - 我怎样才能获得点击按钮的ID?

node.js - 使用 Visual Studio Task Runner Explorer 运行 gulpfile.js 时,如何调试它?

javascript - 在 Node.js 中包含来自外部文件的 es6 类

node.js - 使用 Node.js 中的特定子进程运行作业