2016-05-01 5 views
1

Я использую Meteor с Iron Router and Stripe. Все работает отлично, но я не могу понять, как перенаправить пользователя на страницу окончательного заказа после завершения оплаты Stripe.Iron Router Meteor, Router.go альтернатива с серверной стороны

На моей стороне клиента у меня появляется модальная рамка, содержащая кнопку, которая гласит: «Оплатить» Когда нажата кнопка «Платить», происходит событие, которое вызывает вызовы и открывает программу Stripe Checkout.

После этого на клиенте запускается Stripe Checkout, и пользователь может ввести данные карты и отправить платеж. Метод серверной стороны для зарядки карты через Stripe завершен, и у меня также есть некоторые другие основные задачи базы данных, которые выполняются для регистрации результата и завершения состояния заказа.

Я создал маршрут с использованием Iron router, который я хочу, чтобы пользователь был перенаправлен также после завершения оплаты Stripe.

В настоящее время модальная коробка продолжает оставаться на экране. Я пытаюсь сделать Router.go отправить пользователя на страницу заказа, которая была настроена после завершения заказа.

Я верю Iron Router Router.go только на стороне клиента. Как я могу завершить процесс заказа и сделать модальную коробку на стороне клиента после завершения оплаты Stripe и перенаправить пользователя на последнюю полную страницу.

Когда я использую 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

Не можете ли вы выполнить router.go() в обратном вызове метода meteor.call после успеха? –

+0

Я закончил тем, что делал в основном то, что вы сказали, и добавил этот router.go после meteor.call – jremi

ответ

0

Вы не можете заставить браузер пользователя от это страницы, если вы уже не имеете некоторую логику на на «пульт дистанционного управления». К счастью, существует ряд опций для последних:

Если вы используете маршрутизатор, вы можете сделать маршрут реактивным, в зависимости от содержимого подписки. Кроме того, у вас может быть блок Tracker.autorun или observeChanges с кодом вашей клиентской стороны, который проверяет наличие изменений в этой «контрольной» коллекции, а затем выполняет соответственно Router.go.

Что касается коллекции элементов управления, просто коллекция, как:

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

будет делать, а затем вставить в него с сервера, когда происходит событие (Control.insert({route: "newroute"})), и проверить изменения содержимого на клиенте , например, так:

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

 Смежные вопросы

  • Нет связанных вопросов^_^