Soy nuevo en nodejs y mongodb. Estoy tratando de crear una aplicación simple para hacer con nodejs y mongodb. He agregado la tarea en la base de datos. Ahora, en el método de publicación, estoy usando el método insertOne de mongodb y en res.json tengo el siguiente error.
res.json(info.ops[0].data)
TypeError: no se puede leer la propiedad '0' de indefinido
Código:
app.post('/create-item', function(req, res){ db.collection('items').insertOne({ text:req.body.text }, function(err, info){ res.json(info.ops[0]) }) }) A continuación se muestra la captura de pantalla de Error.
En las versiones actuales, no se devuelve ninguna propiedad llamada ops cuando insertOne tiene éxito.
De ahí el error TypeError: Cannot read property '0' of undefined
insertOne devuelve dos propiedades:
acknowledged
Indica si este resultado de escritura fue reconocido. De lo contrario, todos los demás miembros de este resultado no estarán definidos.
insertedId
El identificador que se insertó. Si el servidor generó el identificador, este valor será nulo ya que el controlador no tiene acceso a esos datos.
Ver:
app.post('/create-item', function(req, res){ db.collection('items').insertOne({ text:req.body.text }, function(err, info){ console.log(info.acknowledged) console.log(info.acknowledged) res.json(info.acknowledged) }) }) En versiones anteriores, por ejemplo 3.2 , se devolvían diferentes propiedades para insertOne :
De manera similar, se devolvieron diferentes propiedades para updateOne :
Para obtener más información sobre cómo migrar a la versión 4 desde versiones anteriores, consulte el artículo:
Encontré el mismo problema con el tutorial de la aplicación de tareas pendientes hoy. Para aquellos interesados, intente cambiar la línea: res.json (info.ops [0])
a - res.json({ _id: info.insertedId.toString(), texto: req.body.text })
Esto obtiene la identificación insertada de la base de datos para el elemento recién agregado. Como "información" no parece devolver el texto insertado en la versión actual de mongodb, lo agregué desde el parámetro de solicitud.
Obtuve mi información de aquí: obtenga el _id del documento insertado en la base de datos de Mongo en NodeJS
lo está haciendo de manera incorrecta, primero verifique el error y luego envíe el res.json porque el error se debe a que su información podría ser nula si los datos no se insertaron correctamente, por lo que debe hacerlo así
app.post('/create-item', function(req, res){ db.collection('items').insertOne({ text:req.body.text }, function(err, info){ if (err) { res.json({message: "not inserted successFully"}); return; } res.json(info.ops[0]) }) })Ahora, en el código anterior, ¿qué sucederá si los datos no se insertan correctamente? Enviará el error como respuesta y regresará de la función.