Я хочу вставить большой массив в коллекцию mon goose с помощью рабочего потока узла. но это не отвечает. Я попробовал это без рабочего потока узла, он работает нормально, но с рабочим потоком, он не работает. с этим кодом я пытаюсь. Это мой рабочий файл
worker.js
const { isMainThread, parentPort } = require("worker_threads");
const User = require("./models/user");
const csv = require("csvtojson");
if (!isMainThread) {
console.log("In Worker Thread");
parentPort.on("message", (csvFilePath) => {
csv()
.fromFile(csvFilePath)
.then((jsonObj) => {
User.insertMany(jsonObj)
.then((res) => {
console.log(res);
parentPort.postMessage("result");
})
.catch((err) => {
parentPort.postMessage("error");
console.log(err);
});
});
});
}
Это мой основной файл протектора. Отсюда я отправляю путь данных файла CSV. с этим путем я прочитаю файл CSV и преобразую его в массив JSON, а этот массив я хочу вставить в коллекцию MongoDB с помощью mon goose.
// main thread file
const app = require("express")();
const formidable = require("formidable");
const mongoose = require("mongoose");
const User = require("./models/user");
const csv = require("csvtojson");
mongoose.connect("mongodb://localhost:27017/fileUpload", {
useNewUrlParser: "true",
useUnifiedTopology: true,
});
mongoose.connection.on("error", (err) => {
console.log("err", err);
});
mongoose.connection.on("connected", (err, res) => {
console.log("mongoose is connected");
});
const { isMainThread, Worker } = require("worker_threads");
let worker;
if (isMainThread) {
console.log("In main thread");
worker = new Worker("./worker.js");
worker.on("message", (data) => {
// console.log("Got Message=>", data);
});
worker.on("error", (data) => {});
worker.on("exit", (data) => {});
}
app.get("/", (req, res) => {
worker.postMessage("from main thread");
res.status(200).json("Hellow World");
});
app.post("/upload", (req, res, next) => {
const form = formidable({ multiples: true });
form.parse(req, (err, fields, files) => {
if (err) {
next(err);
return;
}
const csvFilePath = files.file.path;
csv()
.fromFile(csvFilePath)
.then((jsonObj) => {
console.log(jsonObj);
worker.postMessage(csvFilePath);
worker.on("message", (data) => {
res.json({ fields, files, data });
});
});
});
});
app.listen(5001, () => {
console.log("Server Is Running");
});