2017-07-13 249 views
0

我們在流量路由器中有兩條路由。我需要,如果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行保持不變。有人可以解釋 - 爲什麼是這樣以及如何完成重定向?

回答

0

目前唯一的解決辦法是: 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  
 
     ... 
 
     } 
 
})

  • 路由現在正在尋找類似如下:
  • legacydeck: { 
     
         path: '/deck/:oldid(\\d+_\\w+.*)', 
     
         method: 'get', 
     
         action: (context, payload, done) => { 
     
          context.executeAction(loadLegacy, payload, done); 
     
         } 
     
        },

    相關問題