gpt4 book ai didi

javascript - Express 似乎忽略了根路由的 Controller

转载 作者:太空宇宙 更新时间:2023-11-04 00:49:37 25 4
gpt4 key购买 nike

我尝试将网站上的所有 GET 请求(API 请求除外)发送到 Controller ,该 Controller 在显示页面之前检查是否存在登录用户。否则,如果当前未登录,用户将被发送到登录页面。

下面的结构适用于除根路由('/')之外的所有内容。例如,如果我尝试以非登录用户身份点击 /admin/games,我会被正确发送到登录页面。同样,如果我登录,每个页面都会正确显示(注意:我使用的是 AngularJS 客户端)。我遇到的一个问题是,当我点击根路由时,应用程序尝试显示 index.html 而不检查用户是否已登录。我很困惑为什么该路由的处理方式不同,以及为什么我的 pagesController 似乎从未为此路由调用。我已经完成了一些“控制台日志记录”,并确认除了 '/' 之外,每个非 API 路由都会调用 pagesController.index

routes.js

'use strict';

var controllers = require('./controllers');
var v1Router = require('./routes/api/v1');

var pagesController = controllers.pagesController;

module.exports = function(app) {

app.use('/api', v1Router);

app.get('/logout', function(req, res) {
req.logout();
res.redirect('/');
});

app.get(['*'],
pagesController.index
);
};

pages.js

'use strict';

var path = require('path');

var index = function(req, res) {
if (req.user) {
res.sendFile(path.join(__dirname, '../assets', 'index.html'));
} else {
res.sendFile(path.join(__dirname, '../assets', 'signin.html'));
}
};

module.exports = {
index: index
};

更新:我在客户端路由中将根目录从 / 更改为 /a,一切正常。无论出于何种原因 / 都没有通过 pagesController.index 运行。

更新 2:所以我的 app.js 中的这一行导致了问题:

app.use(express.static(path.join(__dirname, 'assets')));

删除该行后,pagesController.index/ 上正确调用,但是我的静态 Assets 均未提供,因此仅删除该行并不能解决问题。如何在忽略 index.html 的同时正确提供静态资源?

最佳答案

您还可以在条件语句中处理路由:

'use strict';

var path = require('path');

var index = function(req, res) {
if (req.user) {
res.sendFile(path.join(__dirname, '../assets', 'index.html'));
} if (req.url === '/') {
** Handle Case Here **
}
else {
res.sendFile(path.join(__dirname, '../assets', 'signin.html'));
}
};

module.exports = {
index: index
};

好吧,我做了一些研究:这里有一篇很棒的文章和可能的解决方案:(不确定它是否适合您的用例)

http://evanhahn.com/express-dot-static-deep-dive/

app.use(express.static(myStaticPath, {
index: ['jokes.txt', 'index.html']
})

您可以简单地提供一个文件数组作为索引,如果找到第一个文件,则提供该文件,如果没有,则提供第二个文件,依此类推。

关于javascript - Express 似乎忽略了根路由的 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33186146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com