【问题标题】:Fluxible-router redirect form one route to anotherFluxible-router 重定向从一条路由到另一条路由
【发布时间】:2017-12-18 07:31:37
【问题描述】:

fluxible-router 中有两条路由。我需要的是,如果访问 legacyDek 路由,则在操作完成后,它将重定向到 deck 路由。

deck: {
        path: '/deck/:id(\\d+|\\d+-\\d+)/:stype?/:sid?/:spath?/:mode?/:theme?',
        method: 'get',
        page: 'deck',
        handler: require('../components/Deck/Deck'),
        action: (context, payload, done) => {
            async.series([
                (callback) => {
                    context.executeAction(loadDeck, payload, callback);
                },
                (callback) => {
                    context.executeAction(loadPresentation, payload, callback);
                }
            ],
            (err) => {
                if(err) console.log(err);
                done();
            });
        }
    },
legacydeck: {
        path: '/deck/:oldid(\\d+_\\w+.*)',
        method: 'get',
        action: (context, payload, done) => {
            context.executeAction(loadLegacy, payload, (err, result) => {
                if (err) console.log(err);
                context.executeAction(navigateAction, {'url' : '/deck/' +result}, done);
            });
        }
    },

重定向本身可以正常工作,但是 url 行保持不变。有人可以解释一下 - 为什么会这样以及如何完全重定向?

【问题讨论】:

    标签: javascript reactjs redirect fluxible


    【解决方案1】:

    目前唯一的解决方案如下: 1. 更改触发重定向的操作,使其返回错误对象,在我的示例中:

    export default function loadLegacy(context, payload, done) {
        log.info(context);
        context.service.read('deck.legacy', {'oldid': parseInt(payload.params.oldid)}, {timeout: 20 * 1000}, (err, res) => {
          //  console.log('Executing loadPresentation action');
            if (err) {
                log.error(context, {filepath: __filename});
                context.executeAction(serviceUnavailable, payload, done);
                //context.dispatch('LOAD_FEATURED_FAILURE', err);
            } else {
                done({'statusCode':'301','redirectURL': '/deck/' + res.new_id});
            }
        });
    }
    1. 更改 server.js 文件,添加行以捕获“301”错误。

    context.getActionContext().executeAction(navigateAction, {url: req.url, reqId: req.reqId}, 
      (err) => {
          if (err) {         
              if (err.statusCode && err.statusCode === '301') {  //handling redirect             
                  res.redirect(err.redirectURL);
              }else{ //handling other errors          
              ...
              }
          }else{  //usual rendering     
          ...
          }
    })
    1. 路线现在如下所示:

    legacydeck: {
            path: '/deck/:oldid(\\d+_\\w+.*)',
            method: 'get',
            action: (context, payload, done) => {
                context.executeAction(loadLegacy, payload, done);
            }
        },

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-21
      • 2016-04-16
      • 2020-10-23
      • 2018-04-02
      • 2019-09-22
      • 2020-11-26
      • 2018-01-06
      • 2019-05-13
      相关资源
      最近更新 更多