Fluxible-роутер перенаправляет с одного маршрута на другой

У нас есть два маршрута в fluxible-router. Мне нужно, чтобы при доступе к маршруту legacyDek, то после завершения действия он перенаправлялся на маршрут колоды.

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 остается неизменной. Может кто-нибудь объяснить - почему это так и как сделать перенаправление полностью?

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);
        }
    },

Другие вопросы по тегам