Rumah > Soal Jawab > teks badan
Saya sedang mencipta aplikasi menggunakan dokumentasi yang disediakan oleh rangka kerja KeystoneJS. Jadi, dalam apl saya, saya mempunyai dua jadual, satu ialah Pengguna dan satu lagi ialah Siaran. Jadi, saya tertanya-tanya, apabila saya membuat siaran dengan log masuk ke kawasan pentadbir, terdapat medan dengan lajur kunci asing, dan medan itu kosong untuk diisi dengan nilai kunci asing dari jadual pengguna. Jadi, apabila saya mencipta siaran baharu menggunakan id pengguna yang dilog masuk dalam KeystoneJS, saya mahu sistem menambah nilai kunci asing secara automatik kepada pengarang.
Jadi, saya mencari di mana-mana untuk penyelesaian tetapi tidak menemui penyelesaian yang sesuai.
Jika sesiapa mempunyai sebarang idea tentang perkara ini, amatlah dihargai jika anda dapat menjawab soalan ini.
Terima kasih
P粉9491909722023-09-15 10:10:38
Pernahkah anda melihat Contoh Blog Terkawal?
Ia mempunyai senarai yang serupa dengan projek anda: Posts
和Users
,可以是Contributors
或Moderators
。在你的情况下,贡献者/管理员的区别并不重要,你会对Post
列表上的钩子感兴趣,特别是resolveInput.create
Hooks, ia kelihatan seperti ini:
hooks: { resolveInput: { create: ({ context, resolvedData }) => { resolvedData.createdAt = new Date(); if (context.session?.contributor) { return { ...resolvedData, createdBy: { connect: { id: context.session?.contributor?.id, }, }, }; } return resolvedData; }, }, // 其他钩子... },
Menurut Dokumentasi:
Jadi inilah peluang kami untuk menukar nilai sebelum menyimpan, termasuk mengisi atau memaksa nilai seperti medan Post.author
anda.
resolveInput
Mendapat objek context
resolveInput
获取context
对象,其中包括对session
对象的引用。该对象的内容由你的会话存储函数决定,但通常包含有关当前用户的信息。在这个示例中,如果登录的用户是贡献者,我们从context.session?.contributor?.id
获取他们的贡献者ID,并将其保存到createdBy
字段。同时,createdAt
, yang termasuk rujukan A kepada objek session
. Kandungan objek ini ditentukan oleh fungsi stor sesi
context.session?.contributor?.id
dan menyimpannya ke medan createdBy
. Pada masa yang sama, medan createdAt
juga ditetapkan kepada tarikh dan masa semasa.
resolvedData
对象和钩子想要进行的任何其他更改)。另一种方法是在字段级别添加resolvedData
函数,但这样我们就需要两个单独的函数 - 一个用于createdAt
,另一个用于createdBy
Perhatikan bahawa memandangkan cangkuk ini dikonfigurasikan pada peringkat senarai, ia sepatutnya mengembalikan data untuk keseluruhan item (pada asasnya - setiap fungsi mengembalikan satu nilai. Untuk mendapatkan maklumat lanjut tentang perbezaan ini, lihat Panduan Cangkuk
Selain itu, adalah penting untuk tidak mengelirukan cangkuk dengan Kawalan Aksesaccess
- iaitu sama ada penyumbang harus dibenarkan membuat siaran di tempat pertama. Dalam contoh ini, kawalan akses dikonfigurasikan secara berasingan, dalam konfigurasi
Satu nota akhir - pada masa penulisan, dokumentasi Hooks API resolveInput
钩子(在列表和字段级别),但没有将其分解为不同的操作(即resolveInput.create
和resolveInput.update
merangkumi
hooks: { resolveInput: ({ operation, context, resolvedData }) => { // 仅对创建操作运行(忽略更新) if (operation !== 'create') return resolvedData; resolvedData.createdAt = new Date(); if (context.session?.contributor) { return { ...resolvedData, createdBy: { connect: { id: context.session?.contributor?.id, }, }, }; } return resolvedData; }, // 其他钩子... },