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});
}
});
}
- Измените файл 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
...
}
})
- Теперь маршрут выглядит следующим образом:
legacydeck: {
path: '/deck/:oldid(\\d+_\\w+.*)',
method: 'get',
action: (context, payload, done) => {
context.executeAction(loadLegacy, payload, done);
}
},