MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Meteor - Perché dovrei usare this.userId su Meteor.userId() quando possibile?

La tua domanda sembra confondere Meteor.userId() e Meteor.user() . Il corpo della domanda sembra chiedere del primo mentre la riga dell'oggetto chiede del secondo. Proverò ad affrontare entrambi.

  1. Sul server, all'interno di una funzione di pubblicazione, chiamando Meteor.userId() o Meteor.user() causa un errore . Invece, usa this.userId o Meteor.users.findOne(this.userId) , rispettivamente. Tuttavia, si noti che la funzione di pubblicazione viene chiamata solo quando un client si iscrive. Se desideri che la pubblicazione cambi quando il record utente cambia, dovrai observe() il cursore restituito da Meteor.users.find(this.userId) e intraprendere le azioni appropriate quando il record cambia.
  2. Sul server, durante l'elaborazione di una chiamata al metodo, Meteor.userId() e Meteor.user() corrisponderanno rispettivamente all'ID dell'utente chiamante e al suo record. Tuttavia, tieni presente che chiama Meteor.user() risulterà in una query DB perché sono essenzialmente equivalente a Meteor.users.findOne(Meteor.userId()) .

    Direttamente all'interno di una chiamata al metodo, puoi anche utilizzare this.userId invece di Meteor.userId() , ma è improbabile che noterai una differenza di prestazioni significativa. Quando il server riceve la chiamata al metodo, esegue l'implementazione del metodo con l'ID utente (e alcune altre informazioni) memorizzato in un particolare slot sulla fibra. Meteor.userId() recupera solo l'ID dallo slot sulla fibra corrente. Dovrebbe essere veloce.

    In genere è più facile refactoring del codice che utilizza Meteor.userId() di this.userId perché non puoi utilizzare this.userId al di fuori del corpo del metodo (ad es. this non avrà una proprietà 'userId' all'interno di una funzione che chiami dal corpo del metodo) e non puoi usare this.userId sul cliente.

  3. Sul client, Meteor.userId() e Meteor.user() non genererà errori e this.userId non funzionerà. Chiamate a Meteor.user() sono essenzialmente equivalenti a Meteor.users.findOne(Meteor.userId()) , ma poiché corrisponde a una query DB mini-mongo, le prestazioni probabilmente non saranno un problema. Tuttavia, per motivi di sicurezza l'oggetto restituito da Meteor.user() potrebbe essere incompleto (soprattutto se il file autopublish pacchetto non è installato).