simpan objek nodejs di dalam tag script pug

Sep 13 2020

Saya memiliki beberapa objek yang perlu saya render / simpan di file pug saya untuk digunakan nanti dalam skrip JS sisi klien.

Untuk menyimpan objek di dalam tag skrip, saya akan menggunakan metode yang dijelaskan di sini dan di sini :

Variabel NodeJS

const object = {
    "someKey": {
        "message":"this works"
    }
}
res.render("index", {object});

pug (di suatu tempat dalam file - catat. setelah tag skrip)

perhatikan juga saya menggunakan tanda kutip ganda - Anda dapat menggunakan tanda kutip tunggal tetapi saya menyebutkan ini untuk nanti

script.
    var object = JSON.parse("!{JSON.stringify(object)}")

lalu di suatu tempat di skrip javascript Anda

alert(object.someKey.message)

Baca lebih lanjut tentang Interpolasi Pug di sini .

Masalah:

Untuk semua penggunaan saya, contoh di atas berfungsi dengan baik. Masalahnya muncul ketika saya memiliki objek dengan satu kutipan di dalamnya:

const object = {
    "someKey": {
        "message":"this doesn't work"
    }
}

Javascript tidak menyukai fakta bahwa ada kutipan tunggal, karena Javascript melihat kutipan tunggal sebagai awal / akhir dari kunci / nilai objek:

mendapatkan ini dari konsol Chrome

Sebab:

Menghapus kutipan tunggal ini menyelesaikan masalah. Saat mencapai titik ini, JSON.parse()fungsi akan melontarkan pengecualian dan berhenti memuat setiap dan semua JS, dengan demikian, tidak ada fungsi lebih lanjut yang berfungsi. Solusinya adalah meletakkan ini di bagian paling akhir halaman, tetapi itu tidak menyelesaikan masalah.

Pertanyaan:

Bagaimana cara mengirimkan objek dari NodeJS ke pesek (seperti yang ditunjukkan di atas) dengan tanda kutip tunggal?


Memperbarui

MCVE masalah menggunakan standar NodeJS mengungkapkan pelat boiler

https://github.com/cybex-dev/pug-single-quote-isse

Petunjuk Pengaturan:

git clone https://github.com/cybex-dev/pug-single-quote-isse
npm install 
npm start

Anda akan melihat beberapa output konsol, saya hanya melihat:

dan "garis kesalahan"

Jawaban

1 kmgt Sep 13 2020 at 16:06

Saya tidak dapat mereproduksi contoh kerja Anda dengan:

script.
    var object = JSON.parse("!{JSON.stringify(object)}")

Tapi yang berhasil bagi saya adalah ini:

script.
    var object = !{JSON.stringify(object)};
    console.log(object.someKey.message);

Tanpa tanda kutip ganda: var object = !{JSON.stringify(object)}