Tengo la ruta app.get para mostrar un documento de elemento que contiene _id, nombre, descripción. Esto es lo que tengo actualmente:
app.get('/itemEdit/:itemID', isLoggedIn, (req, res) => { //console.log("params", req.params) const item_id = req.params.itemID //console.log("ID", item_id) //Here you could query the db and find the item in the array on the user object User.find({ _id: req.user._id }, (err, docs) => { // console.log(docs[0].userInventory) if (err) { console.log(`error: ${err}`) } else { console.log(docs); //You could render edit item page form then make a post route where you query the db and update the item res.render('itemEdit.ejs', {item_id, docs}) } }) console.log("Item query", item_id) }) Sé que esto está agarrando el elemento correcto ya que mi console.log muestra la identificación correcta. Luego, trato de mostrar los datos, pero aquí es donde estoy chocando contra una pared. Tengo la item id pero ¿cómo mostrar el nombre y la descripción que hay en ese mismo artículo? Lo intenté así:
<table> <!-- Table Headers --> <tr> <th>#</th> <th>Item Name</th> <th>Description</th> </tr> <!-- Table Data --> <tr> <td><%= userInventory[item_id].name %></td> <td><%= userInventory[item_id].description %></td> </tr> <% } %> </table> Esto me da un error: SyntaxError: Missing catch or finally after try
¡Cualquier ayuda sería muy apreciada!
Editar:
esquema de usuario:
let userSchema = mongoose.Schema({ username: String, firstName: String, lastName: String, email: String, password: String, userInventory: [{ name: String, description: String }] });Por lo que entiendo, su ruta '/itemEdit/:itemID' debería consultar ese artículo en función del itemID del artículo que se pasa en los parámetros y devolver el artículo.
esquemas : sugiero cambiar sus esquemas para que sean algo como esto
esquema de artículo
{ name: String, description: String .... } referencia al esquema del elemento en userInventory
esquema de usuario
{ username: String, firstName: String, lastName: String, email: String, password: String, userInventory: [{ type: mongoose.Schema.Types.ObjectId, ref: 'item' }] }Entonces tu api debería ser algo como:
app.get('/itemEdit/:itemID', isLoggedIn, (req, res) => { const item_id = req.params.itemID Item.findById(item_Id, (err, doc) => { if (err) { console.log(`error: ${err}`) } else { res.render('itemEdit.ejs', doc) } }) console.log("Item query", item_id) })itemEdit.ejs
<table> <!-- Table Headers --> <tr> <th>#</th> <th>Item Name</th> <th>Description</th> </tr> <!-- Table Data --> <tr> <td><%= doc.name %></td> <td><%= doc.description %></td> </tr> <% } %> </table>