2016-05-01 160 views
1

我使用流星與鐵路由器和條紋。一切都很好,但我無法弄清楚在Stripe費用完成後如何將用戶重定向到最終訂單完成頁面。鐵路由器流星,Router.go替代服務器端

在我的客戶端,我有一個出現的模式框,其中包含一個按鈕,顯示「付款」單擊付款按鈕時會觸發一個調用並打開分條簽出的事件。

條紋簽出然後在客戶端啓動,用戶可以輸入卡的詳細信息並提交付款。通過Stripe爲卡充電的服務器端方法已完成,我還有一些其他基本數據庫任務正在執行以記錄結果並完成訂單狀態。

我已經創建了一個使用Iron路由器的路由,我希望用戶在Stripe支付完成後也被重定向。

截至目前,模態框仍然保持在屏幕上。我試圖讓Router.go將用戶發送到訂單完成後設置的訂單頁面。

我相信鐵路路由器Router.go僅用於客戶端。如何完成訂單流程並使客戶端模式框在條帶費用完成後消失並將用戶重定向到最終完成頁面。

當我使用Router.go在服務器端,我得到錯誤:

Exception in callback of async function: TypeError: Object function router(req, res, next) {//XXX this assumes no other routers on the parent stack which we should probably fix 
+0

你不能在成功後在meteor.call方法的回調中做router.go()嗎? –

+0

我結束了基本上你所說的,並且在meteor.call之後添加了這個router.go – jremi

回答

0

你不能強迫用戶的瀏覽器從它的頁面的路程,如果你不已經對一些邏輯頁面「遙控它」。幸運的是後者有很多選項:

如果您使用的是路由器,您可以根據訂閱集合的內容使路由本身爲被動路由。或者,您可以在您的客戶端代碼上有Tracker.autorunobserveChanges區塊,用於檢查對該「控制」集合的更改,然後相應地執行Router.go

對於控制集合,一個簡單的集合,如:

var Control = new Mongo.Collection('control'); 

會做,然後你從服務器發生事件時(Control.insert({route: "newroute"}))插入到它,併爲您的客戶端上的內容變化,比如像這樣:

Control.find().observeChanges({ 
    added: function(id, doc) { 
    Router.go(doc.route); 
    });