Express/MongoDB/EJS - Tidak dapat membaca objek

Jadi saya memiliki beberapa data di Database Mongo saya, yang saya.find() kirim secara ekspres dan kirimkan ke tampilan EJS saya. cukup mudah. Tapi masalahnya adalah ketika saya mencoba membacanya menggunakan <pre><%=%></pre> saya tidak terdefinisi. Berikut kode selengkapnya:
Array Data yang berisi Objek di MongoDB:

[{
  _id: 6069820f402d01120cda8cff,
  imageName: 'Dining Plate',
  imagePath: './public/assets/img/6.jpg',
  description: 'Wallpapers',
  __v: 0
}]

Kode Ekspres tempat saya mendapatkannya dan mengirimkannya ke EJS:

app.get('/wallpapers/:id', ((req, res) => {
  const urlID = req.params.id;
  Thing.find({}, function (err, result) {
    if (err) {
      console.log(err);
    } else {
      var fres = result.filter(d => d._id == urlID);
      res.render('wallpaper-page',{fres});
    }
  });
})
)

dan EJSnya:

<pre><%= fres.description%> %> </pre>

Dan Sekarang KEBINGUNGAN BESAR: ketika saya mengganti fres.description dengan fres._id, Ini berfungsi dengan baik. tapi hanya itu, ia tidak ingin mencetak nilai kunci lainnya. Saya telah mencari jauh dan luas selama hampir satu hari sekarang. Tapi tidak ada yang membantu. ini menggangguku sekarang.

PS: console.log(fres.description) adalah undefined dan console.log(fres._id) berfungsi dengan baik.

Mengapa? Bagaimana cara memperbaikinya? tolong beri tahu saya jika Anda memerlukan kode lain.


person MasterMind    schedule 04.04.2021    source sumber
comment
Jika harus mencari berdasarkan id, kenapa tidak menggunakan Thing.findById(req.params.id) saja. Bisakah Anda juga memberi tahu apa yang console.log(fres) berikan?   -  person Som Shekhar Mukherjee    schedule 04.04.2021
comment
findbyid akan tetap memberi saya objeknya. console.log(fres) memberi saya objeknya juga.{ _id: 6069820f402d01120cda8cff, imageName: 'Dining Plate', imagePath: './public/assets/img/6.jpg', description: 'Wallpapers', __v: 0 }   -  person MasterMind    schedule 04.04.2021
comment
Silakan lihat jawaban saya, beri tahu saya jika itu membantu. @lolman   -  person Som Shekhar Mukherjee    schedule 04.04.2021


Jawaban (2)


Selain masalah dengan metode filter mengembalikan array, saya rasa Anda memiliki masalah lain dalam mengakses data dari respons Mongoose.

Masalah ini dibahas di sini: Mongoose mengembalikan data di dalam objek _doc . Anda dapat memeriksa jawaban saya dengan kode pengujian untuk mendemonstrasikan beberapa metode untuk mengakses data dari respons Mongoose.

person Đăng Khoa Đinh    schedule 04.04.2021
comment
ya, itulah yang saya temukan sendiri dan gunakan .lean dengan .findOne yang memperbaikinya. Saya baru saja hendak mempostingnya di sini dan menemukan ini. - person MasterMind; 05.04.2021

Array.filter mengembalikan array. Jadi, var fres = result.filter(d => d._id == urlID); variabel fres adalah array dengan objek di dalamnya.

Dan jika Anda hanya memerlukan objek di template EJS Anda, Anda harus meneruskannya saja. res.render('wallpaper-page',{fres: fres[0]});

Sekarang Anda dapat mengakses kunci description secara langsung. Tapi saya tidak mengerti cara kerja fres._id, seharusnya juga undefined.

person Som Shekhar Mukherjee    schedule 04.04.2021
comment
Oh maaf! Saya membuat kesalahan konyol, seharusnya {fres: fres[0]} @lolman Coba ini. - person Som Shekhar Mukherjee; 04.04.2021
comment
Saya membuat variabel lain dengan nilainya sebagai fres[0] dan meneruskannya ke tampilan. Saya masih belum terdefinisi dan ._id berfungsi edit: ok Edit2: masalahnya masih berlanjut :( - person MasterMind; 04.04.2021
comment
Apakah ini masalahnya <pre><%= fres.description%> %> </pre> Anda menutupnya dua kali. - person Som Shekhar Mukherjee; 04.04.2021
comment
ya sudah melihatnya sebelumnya, sudah memperbaikinya - person MasterMind; 04.04.2021
comment
Di mana tepatnya Anda mencatat fres? Catat setelah metode filter. - person Som Shekhar Mukherjee; 04.04.2021