Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

611
Vistas
TypeError: no se puede leer la propiedad '0' de undefined en el método de publicación en nodejs

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.Captura de pantalla de error

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

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:

  • Insertar uno
  • Insertar un resultado
 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 :

  • insertOne @3.2
  • insertOneWriteOpCallback @3.2

De manera similar, se devolvieron diferentes propiedades para updateOne :

  • actualizar uno @ 3.2
  • actualizarOneWriteOpCallback @ 3.2

Para obtener más información sobre cómo migrar a la versión 4 desde versiones anteriores, consulte el artículo:

Cambios en 4.x (¡y cómo migrar!)

over 4 years ago · Santiago Trujillo Denunciar

0

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

over 4 years ago · Santiago Trujillo Denunciar

0

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.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda