Как вставить большой массив в коллекцию mon goose mongodb с помощью рабочего потока узла? - PullRequest
0 голосов
/ 22 апреля 2020

Я хочу вставить большой массив в коллекцию 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");
});


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...