繁体   English   中英

node.js-重定向到中间件中的另一个URL

[英]node.js - redirect to another url in middleware

在我的MEAN SPA应用程序中,我想将所有url请求重定向到带有其他参数的索引 例如,当用户键入http://localhost:3003/ ,它应调用index page 当用户键入http://localhost:3003/game/playstation/ps4 ,它还应该调用index页面 ,并带有game, palystation, ps4game, palystation, ps4等额外参数,但它会重定向到没有额外参数的索引 我的代码如下:

 app.use(function(req, res, next) {
    // get the url without main domain address
    var original_url =  req.originalUrl;

    // convert string url to array
    var url_part = original_url.split('/');

    // remove first array, bcz first is always ''
    url_part.shift();

    // check if url is main url request without any parameter
    if( url_part[0] !== '' ) {
        // if not, then store all url_part array
        req.request_url = url_part;

        // redirct to main '/' call
        // when it redirect to main url, then req.request is empty
        res.redirect('/');
     }

    next();
});

app.get('/', function( req, res) {
     // here req.request_url is always 'undefined'
     console.log("req.request_url : ", req.request_url);

      return res.render('index.ejs', {
         url: req.request_url
      });
});

编辑

我必须重定向到索引路由,而不要重定向到其他路由,因为在我的SPA应用程序中,我只是使用默认的js,css等加载了索引路由,所有其他路由都将从api调用。

提前致谢。

您可以这样操作,并且两者都将映射到相同的函数,但是如果从'/'路由映射,则将设置参数或为null

var indexPageFunc = function(res, req){
  var type = req.param('type'); // game or null
  var system = req.param('system'); // playstation or null
  var version = req.param('version'); // ps4 or null
  res.render('index.ejs');
}
app.get('/', indexPageFunc);
app.get('/:type/:system/:version, indexPageFunc);

你不能那样做。 将302重定向到浏览器,然后用户向您的服务器发出新的单独请求。

您可以为所有路线返回相同的响应

app.get('*', function(req, res) {
    // get the url without main domain address
    var original_url =  req.originalUrl;

    // convert string url to array
    var url_part = original_url.split('/');

    // remove first array, bcz first is always ''
    url_part.shift();

    res.render('index.ejs', {
        url: url_part
    });
});

您有两个选择:重定向到另一个URL并包含GET参数。

var express = require('express'),
    app = express();

app.use(function(req, res, next) {
    var url_part = req.originalUrl.split('/');
    console.log('' + req.originalUrl + ' => ' + url_part);
    url_part.shift();
    if( url_part[0] !== '' ) {
        //You could add as GET parameters, but it will be shown to the user
        res.redirect('/?request_url=' + url_part);
     }

    next();
});

app.get('/', function (req, res) {
     // here req.request_url is always 'undefined'
     console.log("req.request_url : ", req.request_url);

      return res.json({
         url: req.request_url
      });
});

app.listen(8080);

否则,您将不得不找到一种方法来重写URL,并进行POST请求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM