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

656
Vistas
Cómo insertar nuevos datos en mongoDB usando un subproceso de trabajo en nodejs

Quiero insertar datos en mongoDB usando worker thread de trabajo

En este momento tengo un archivo de trabajo, el propósito completo del archivo de trabajo es guardar los datos en mongoDB y mainjs está enviando el nombre del agente que quiero guardar en mongoDB

trabajador.js

 const { workerData, parentPort } = require('worker_threads') const Agent = require('../models/agent') console.log("Worker thread is running like a hell: ", workerData) const processRecord = async () => { const agent = new Agent({agent:workerData}) try { await agent.save() }catch(e) { console.log(e) } } processRecord();

principal.js

 const express = require('express') const router = new express.Router() const { Worker } = require('worker_threads') router.post('/agent', async (req, res) => { function runService(workerData) { return new Promise((resolve, reject) => { const worker = new Worker('../src/router/worker.js', { workerData }); worker.on('message', resolve); worker.on('error', reject); worker.on('exit', (code) => { if (code !== 0) reject(new Error(`Worker stopped with exit code ${code}`)); }) }) } async function run() { const result = await runService('john wick') console.log("this is from main thread " + result); } run().catch(err => console.error(err)) })

Cuando trato de guardar los datos usando un subproceso de trabajo, aparece este error:

 MongooseError: Operation `agents.insertOne()` buffering timed out after 10000ms at Timeout.setTimeout (F:\node\insuredmine\node_modules\mongoose\lib\drivers\node-mongodb-native\collection.js:184:20) at ontimeout (timers.js:436:11) at tryOnTimeout (timers.js:300:5) at listOnTimeout (timers.js:263:5) at Timer.processTimers (timers.js:223:10)

y cuando ejecuto la misma línea de código sin subproceso de trabajo, funciona bien.

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

0

Necesitaría configurar mongoose y conectarse a MongoDB dentro de un subproceso de trabajo porque Worker ha aislado env ie su propio ciclo de eventos, etc. aquí. Los trabajadores solo son útiles cuando tiene tareas sincrónicas de larga duración para realizar, por ejemplo, cifrar un archivo, cambiar el tamaño de una imagen o procesamiento de datos complejos, clasificar datos grandes, etc.

Puede consultar este artículo para ver el código de ejemplo https://henrikgronvall.com/articles/nodejs-worker-threads/

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
Asistente virtual