带重定向的 Node.js 包罗万象的路由始终使用 Angular 呈现索引页面,无论 url 是什么

2023-12-11

本质上当我使用包罗万象的路线并使用res.redirect('/')无论我输入的网址如何,它总是会呈现索引/主页(即 Angular 似乎没有“看到”完整的网址),但是如果我放置res.render('index')在包罗万象的路线中一切正常。我不想重复代码并重定向到“/”应该可以工作,我可能在这里的某个地方犯了一个愚蠢的错误,任何帮助将不胜感激!

角度路由:

app.config(function ($routeProvider, $locationProvider) {
$locationProvider.html5Mode(true);

$routeProvider
    .when('/', 
        {   
            templateUrl: 'partials/home.jade'
        })
    .when('/about', 
        {
            templateUrl: 'partials/about.jade'
        })
    .otherwise( {redirectTo: '/'});
});

这将在输入时正确呈现关于页面site-address/about:

app.get('/', function (req, res) {
    res.render('index');
});

app.get('/partials/:name', function (req, res) {
    res.render('partials/' + req.params.name);
});

app.get('*', function (req, res) {
    res.render('index');
});

这将始终只显示索引页:

app.get('/', function (req, res) {
    res.render('index');
});

app.get('/partials/:name', function (req, res) {
    res.render('partials/' + req.params.name);
});

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

配置如果有帮助:

// Configuration
app.configure(function () {
    app.set('port', process.env.PORT || 1337);
    app.set('views', __dirname + '/views');
    app.set('view engine', 'jade');
    app.use(express.favicon());
    app.use(express.logger('dev'));
    app.use(express.bodyParser());
    app.use(express.methodOverride());
    app.use(express.static(path.join(__dirname, 'public')));
    app.use(app.router);
});

这是设计使然。

当你使用res.redirect('/'),Node/Express 正在发送 HTTP 重定向,这将更改浏览器中的 URL,因此当呈现索引模板时,以及运行 Angular 代码时,URL 为/,无论用户输入什么(重定向的全部内容)。

当您省略重定向并仅发送模板作为响应时,NodeJs 将使用 HTTP 200(成功)以及 HTML 内容进行响应。由于 URL 没有更改,因此当您的应用程序运行时,角度路由会正确路由。

编辑添加:地址评论

我不想让两条路线呈现相同的模板,而是摆脱/将所有内容一起路由,然后让所有内容呈现索引模板,然后将控制权交给 Angular 路由器。

否则,我会考虑从概念上分割你的路由:你的所有应用程序路由都专门发送到角度路由器,并且你通过nodejs渲染静态路由,并使用你的catch all为丢失或未知的资源渲染更合适的页面(对于您的用户)。

您可以使用类似正则表达式的语言来指定单个处理程序:

app.get('/()|(about)|(contact)/',function(req,res) {/* handle */});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带重定向的 Node.js 包罗万象的路由始终使用 Angular 呈现索引页面,无论 url 是什么 的相关文章

随机推荐