Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

195
Visualizações
Node.js y MongoDB recuperan datos de la actualización anterior en lugar de la actualización actual

Estoy practicando Node.js y estoy creando un sitio web donde la gente puede votar cosas y luego obtener los resultados. Los votos se realizan utilizando la ruta POST /coffeeorwater que luego redirige a la ruta /results1 que muestra los resultados.

El problema = los votos van del formulario en la interfaz a Node a MongoDB y de regreso a Node y luego a la ruta /results1, pero a veces los números de votos que se muestran están detrás de los números que están en la base de datos.

Creo que tiene algo que ver con la naturaleza asincrónica de Node o tal vez con la forma en que configuré las rutas, ya que los datos deben enviarse y luego regresar rápidamente.

Lo que he intentado hasta ahora es buscar cosas como "datos que regresan usando Node que no se actualizan inmediatamente" y "retraso en el recuento al devolver datos de MongoDB", pero no he encontrado la solución. Soy totalmente autodidacta, así que pido disculpas si algo de esto es obvio o debería haber sido encontrado fácilmente.

 const express = require('express'); const application = express(); const mongoose = require('mongoose'); const bodyParser = require('body-parser'); application.set('view engine', 'ejs'); application.use(bodyParser.urlencoded({ extended: true })); application.use(express.json()); mongoose.connect(process.env.DATABASE_PASSWORD) .then(console.log('Database connected')); const db = mongoose.connection; application.get('/', (request, response) => { response.render('index', { data: '1234', }); }); application.post('/coffeeorwater', async (request, response, next) => { const choice = request.body.coffeeorwater; const updatevotes = async () => { if (choice == 'coffee') { db.collection('data').update( { question: 'coffeeorwater' }, { $inc: { coffeevotes: 1 } } ) } if (choice == 'water') { db.collection('data').update( { question: 'coffeeorwater' }, { $inc: { watervotes: 1 } } ) } }; await updatevotes(); console.log('POST made'); response.redirect('/results1'); }); application.get('/results1', async (request, response) => { const results = await db.collection('data').findOne({ question: 'coffeeorwater' }); response.render('results1', { coffeevotes: results.coffeevotes, watervotes: results.watervotes, }); }); application.listen(8080, () => { console.log('Listening here'); });
about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

para db.collection('data').update en primer lugar, no es un método asíncrono, por lo que puede usar la devolución de llamada para obtener el resultado O usar mongoose mongoose Model.updateOne

verifique esta referencia nodejs_mongodb_update

NOTA: - si todavía tiene un problema, mencione en el comentario, le daré un ejemplo

about 4 years ago · Juan Pablo Isaza Relatório

0

Podrías usar Model.findOneAndUpdate

Código de ejemplo:

Model.findOneAndUpdate({[donde condiciones]}, {[datos para actualizar]}, {[opciones]}, función de devolución de llamada());

El modelo podría ser cualquier modelo de mangosta.

opciones =>

-> nuevo: booleano (verdadero/falso), predeterminado: falso; si se establece en verdadero, devuelve el documento actualizado

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda