Pertanyaan Anda tampaknya menggabungkan Meteor.userId()
dan Meteor.user()
. Tubuh pertanyaan tampaknya menanyakan tentang yang pertama sementara baris subjek menanyakan tentang yang terakhir. Saya akan mencoba membahas keduanya.
- Di server, dalam fungsi publikasikan, memanggil
Meteor.userId()
atauMeteor.user()
akan menyebabkan kesalahan . Sebagai gantinya, gunakanthis.userId
atauMeteor.users.findOne(this.userId)
, masing-masing. Namun, perhatikan bahwa fungsi publikasikan hanya dipanggil saat klien berlangganan. Jika Anda ingin publikasi berubah saat catatan pengguna berubah, Anda harusobserve()
kursor dikembalikan olehMeteor.users.find(this.userId)
dan mengambil tindakan yang tepat saat catatan berubah. -
Di server, saat pemanggilan metode sedang diproses,
Meteor.userId()
danMeteor.user()
akan sesuai dengan ID pengguna panggilan dan catatan mereka, masing-masing. Namun, perlu diketahui bahwa panggilan keMeteor.user()
akan menghasilkan kueri DB karena dasarnya setara denganMeteor.users.findOne(Meteor.userId())
.Langsung dalam pemanggilan metode, Anda juga dapat menggunakan
this.userId
bukannyaMeteor.userId()
, tetapi Anda tidak akan melihat perbedaan performa yang signifikan. Saat server menerima panggilan metode, itu menjalankan implementasi metode Anda dengan ID pengguna (dan beberapa info lainnya) disimpan di slot tertentu pada serat.Meteor.userId()
hanya mengambil ID dari slot pada serat saat ini. Itu harus cepat.Biasanya lebih mudah untuk memfaktorkan ulang kode yang menggunakan
Meteor.userId()
darithis.userId
karena Anda tidak dapat menggunakanthis.userId
di luar badan metode (mis.this
tidak akan memiliki properti 'userId' dalam fungsi yang Anda panggil dari badan metode) dan Anda tidak dapat menggunakanthis.userId
pada klien. - Pada klien,
Meteor.userId()
danMeteor.user()
tidak akan menimbulkan kesalahan danthis.userId
tidak akan berfungsi. Panggilan keMeteor.user()
adalah pada dasarnya setara denganMeteor.users.findOne(Meteor.userId())
, tetapi karena ini sesuai dengan kueri DB mini-mongo, kinerja mungkin tidak akan menjadi masalah. Namun, untuk alasan keamanan, objek yang dikembalikan olehMeteor.user()
mungkin tidak lengkap (terutama jikaautopublish
paket tidak diinstal).