如何在 mongoDB 中使用 nodejs 中的工作线程插入新数据
How to insert a new data in mongoDB using worker thread in nodejs
我想使用 worker thread
将数据插入 mongoDB
现在我有一个工作文件,工作文件的全部目的是将数据保存到 mongoDB 中,而 mainjs 正在发送我要保存到 [=33= 中的代理的名称]
worker.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();
main.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))
})
当我尝试使用工作线程保存数据时出现此错误:
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)
当我 运行 没有工作线程的同一行代码时,它 运行 没问题。
您需要在工作线程中配置 mongoose
并连接到 MongoDB
,因为 Worker 已经隔离了环境,即它自己的事件循环等。如果您使用 Worker 将数据保存到 MongoDB 仅用于学习目的,否则没关系,否则这里不使用 Worker。 Workers 仅在您需要执行长时间运行 同步任务时才有用,例如加密文件、调整图像大小或复杂数据处理、对大数据进行排序等
示例代码可以参考这篇文章
https://henrikgronvall.com/articles/nodejs-worker-threads/
我想使用 worker thread
现在我有一个工作文件,工作文件的全部目的是将数据保存到 mongoDB 中,而 mainjs 正在发送我要保存到 [=33= 中的代理的名称]
worker.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();
main.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))
})
当我尝试使用工作线程保存数据时出现此错误:
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)
当我 运行 没有工作线程的同一行代码时,它 运行 没问题。
您需要在工作线程中配置 mongoose
并连接到 MongoDB
,因为 Worker 已经隔离了环境,即它自己的事件循环等。如果您使用 Worker 将数据保存到 MongoDB 仅用于学习目的,否则没关系,否则这里不使用 Worker。 Workers 仅在您需要执行长时间运行 同步任务时才有用,例如加密文件、调整图像大小或复杂数据处理、对大数据进行排序等
示例代码可以参考这篇文章 https://henrikgronvall.com/articles/nodejs-worker-threads/