2016-05-01 13 views
1

Ich benutze Meteor mit Iron Router und Stripe. Alles funktioniert gut, aber ich kann nicht herausfinden, wie man den Benutzer nach Abschluss der Stripe-Ladung zu einer endgültigen Seite der Bestellung umleitet.Iron Router Meteor, Router.go Alternative von Server-Seite

Auf meiner Client-Seite habe ich eine modale Box, die eine Schaltfläche enthält, die sagt, "Pay" Wenn die Pay-Taste angeklickt wird, wird ein Ereignis ausgelöst, das Stripe Checkout aufruft und öffnet.

Der Stripe Checkout wird dann auf dem Client initiiert und der Benutzer kann die Kartendetails eingeben und die Zahlung senden. Die serverseitige Methode zum Laden der Karte über Stripe ist abgeschlossen und ich habe auch einige andere grundlegende Datenbankaufgaben, die ausgeführt werden, um das Ergebnis zu protokollieren und den Bestellstatus abzuschließen.

Ich habe eine Route mit Iron Router erstellt, die ich möchte, dass der Benutzer auch nach Abschluss der Stripe-Zahlung umgeleitet wird.

Ab sofort bleibt die modale Box auf dem Bildschirm. Ich versuche, den Router.go dazu zu bringen, den Benutzer auf die Bestellseite zu schicken, die nach der Bestellung eingerichtet wurde.

Ich glaube der Iron Router Router.go wird nur clientseitige verwendet. Wie kann ich den Bestellvorgang abschließen und die clientseitige modale Box verschwinden lassen, nachdem die Stripe-Gebühr abgeschlossen wurde, und den Benutzer auf die letzte vollständige Seite umleiten?

Wenn ich die Router.go auf Server-Seite verwenden, erhalte ich Fehler:

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

Kannst du router.go() im Callback der meteor.call-Methode nach Erfolg nicht tun? –

+0

Ich endete im Grunde, was Sie sagten, und fügte dieses router.go nach dem meteor.call hinzu – jremi

Antwort

0

Sie können nicht den Browser des Benutzers erzwingen davon Seite weg, wenn Sie nicht bereits eine gewisse Logik haben auf die Seite "Fernbedienung". Glücklicherweise gibt es eine Reihe von Optionen für Letzteres:

Wenn Sie einen Router verwenden, können Sie die Route selbst reaktiv machen, abhängig vom Inhalt einer abonnierten Sammlung. Alternativ können Sie einen Tracker.autorun- oder einen observeChanges-Block auf Ihrem clientseitigen Code verwenden, der nach Änderungen an dieser "Steuerelement" -Auflistung sucht, und dann Router.go entsprechend ausführen.

Wie für die Steuererhebung, eine einfache Sammlung wie:

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

tun würde, und Sie legen Sie dann in sie von dem Server, wenn das Ereignis eintritt (Control.insert({route: "newroute"})), und überprüfen Sie auf Inhaltsänderungen auf dem Client wie zum Beispiel:

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