Domanda

Usando il router di ferro È possibile aggiungere ganci come così:

// this hook will run on almost all routes
Router.before(mustBeSignedIn, {except: ['login', 'signup', 'forgotPassword']});

// this hook will only run on certain routes
Router.before(mustBeAdmin, {only: ['adminDashboard', 'adminUsers', 'adminUsersEdit']});
.

Vedi: https://github.com/eventendmind/iron-Router#Us-Ganci

Ma le documentazioni non dicono come rendere questi ganci "lato server".

L'idea è quella di creare un gancio che supervisiona la pubblicazione di raccolte per tutte le rotte, ad eccezione di uno o due percorsi specifici in cui voglio più controllo su ciò che è stato pubblicato.

È stato utile?

Soluzione

Il router di ferro è solo lo stesso sia sul client che sul server e le dichiarazioni possono essere eseguite su una directory / file disponibile per il client che il server.

Per impostazione predefinita, i percorsi dichiarati sono per il client. Se si desidera che un percorso sia lato server, dichiari esplicitamente quindi includendo where: 'server'.

Preso da Documenti ufficiali :

.

Definizione dei percorsi e configurazione del router è quasi identico al server e sul client. Per impostazione predefinita, i percorsi vengono creati come percorsi client. È possibile specificare che un percorso è destinato al server fornendo un punto in cui proprietà al percorso come questa:

Router.map(function () {
  this.route('serverRoute', {
    where: 'server',

    action: function () {
      // some special server side properties are available here
    }
  });
});
.

.

Si noti che dove deve essere posizionato in router.Map, non sul controller.

Funzioni di azione del server (routecontrollers) hanno diverse proprietà e metodi disponibili. Vale a dire, non c'è ancora il rendering sul server. Quindi il metodo di rendering non è disponibile. Inoltre, non è possibile aspettare l'abbonamento o chiamare il metodo di attesa sul server. I percorsi del server ottengono la richiesta nuda, la risposta e le prossime proprietà della richiesta di connessione, nonché l'oggetto Params proprio come nel client.

Router.map(function () {
  this.route('serverFile', {
    where: 'server',
    path: '/files/:filename',

    action: function () {
      var filename = this.params.filename;

      this.response.writeHead(200, {'Content-Type': 'text/html'});
      this.response.end('hello from server');
    }
  });
});
.

Come vedi, c'è solo una convenzione di denominazione, quindi puoi indicare qualcosa del genere:

Router.before(someFilter, {only: ['clientRoute1', 'clientRoute2', 'serverRoute1']});
.

o

Router.before(someOtherFilter, {except: ['clientRoute3', 'clientRoute4', 'serverRoute2']});
.

Proprio come vorresti normalmente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top