• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

396
Views
NodeJS/MongoDB: ¿el campo se agrega solo una vez?

Estoy aprendiendo React with Node (Express/Mongoose) y MongoDB y todo parece funcionar como se esperaba ahora, pero tengo este gran problema:

 var userSchema = new mongoose.Schema({ login: { type: String, required: true, unique: true }, password: { type: String, required: true } }) app.post('/registerUser', function (req, res) { res.send(req.body) db.on('error', console.error.bind(console, 'connection error:')) // save user using model var user = new UserModel(req.body) user.save() }

Cada vez que PUBLIQUE el inicio de sesión y la contraseña, se guarda solo una vez y luego se termina.

Entonces, por ejemplo, si envío POST tres veces:

login=admin&password=admin

login=admin2&password=admin2

login=admin3&password=admin3

db.users.count() muestra 1 y solo el primer POST (admin:admin) está en la base de datos. El resto está siendo ignorado. Estoy ejecutando console.logs para ver qué está mal, pero cada POST obtiene un _id diferente, pero de alguna manera no guardo después del primero. Estaba pensando que tal vez hay algo mal con save y tal vez debería usar algo como update o create , pero todos los tutoriales que he visto y la documentación dicen que use save .

Cuando elimino el campo y la colección está vacía y luego envío POST, se guarda inmediatamente y luego ignora cualquier otro POST (segundo, tercero, etc.).

¿Qué estoy haciendo mal? Quiero tener más de 1 usuario en mi colección :(

[EDITAR]

Parece que mi ID se está creando "sobre la marcha", por lo que MongoDB debería activar la insert de acuerdo con los documentos: https://docs.mongodb.com/manual/reference/method/db.collection.save/#behavior (también yo' No estoy seguro de lo que está haciendo en este momento, porque tampoco parece una update :/)

about 3 years ago · Santiago Trujillo
2 answers
Answer question

0

Su problema es que tiene una colección que tiene un índice único que impide la creación, así que simplemente elimine ese índice:

 db.users.dropIndex('index name here');

Consejo adicional:

1) db.on('error' no detectará errores de operación de db.

2) Siempre intente crear un registro y luego responda. En el caso de la experiencia del usuario, se debe informar al usuario si la cuenta se creó correctamente o no.

En resumen, mira este:

 db.on('error', console.error.bind(console, 'connection error:')) app.post('/registerUser', (req, res) => { // 1. check if user account exist const query = { login: req.body.login }; UserModel .findOne(query) .exec((error, user) => { if(error) { console.error('ERROR:', error); res.status(500).send({ type: 'system', message: 'Cannot create user record', trace: error }); return; } if(user) { res.status(405).send({ type: 'not-allowed', message: 'User record already exists' }); return; } // 2. create record if user account record does not exist UserModel.create(req.body, (error, user) => { if(error) { console.error('ERROR:', error); res.status(500).send({ type: 'system', message: 'Cannot create user record', trace: error }); return; } res.send(user); }); }); });
about 3 years ago · Santiago Trujillo Report

0

OK, olvidé por completo que podía depurarlo usando la CLI de mongo, el problema fue bastante fácil de detectar desde allí. Si esto te sucede, prueba estos pasos:

Inicie la línea de comando/terminal del formulario mongo .

Intente replicar el nodo de acción problemático/controles de mangosta para usted, en mi caso estaba agregando nuevos usuarios:

use users db.users.save( { login: "fromCLI", password: "fromCLI" } ) db.users.save( { login: "fromCLI2", password: "fromCLI2" } )

Lea el mensaje de error, en mi caso fue:

"errmsg" : "E11000 duplicate key error collection: users.users index: username_1 dup key: { : null }"

No tengo índice de nombre de username . Solía tener. ¡Tuve que dejar la colección y luego mágicamente comenzó a funcionar!

about 3 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error