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

时间:2016-01-15 11:27:51

标签: javascript node.js

在我的 MEAN SPA 应用程序中,我想使用其他参数将所有网址请求重定向到索引。例如,当用户键入http://localhost:3003/时,应调用索引页。当用户输入http://localhost:3003/game/playstation/ps4时,它还应使用game, 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 应用程序中,我只是加载我的索引路由,默认< strong> js,css和其他,其他所有人都会来自 api

提前致谢。

3 个答案:

答案 0 :(得分:1)

你可以这样做,两者都会映射到同一个函数,但会设置参数,如果它从'/'路径映射

,则为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);

答案 1 :(得分:0)

你不能这样做。将发送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
    });
});

答案 2 :(得分:0)

您有两种选择:重定向到另一个网址并包含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请求。