0

Sample code 1: multer is working fine in a basic server when uploading files.

const express = require('express');
const multer = require('multer');
const app = express();

const upload = multer({ dest: 'temp/' });

app.post('/upload', upload.single('image'), (req, res) => {
  if (!req.file) {
    res.status(400).send('No file uploaded.');
  } else {
    res.send('File uploaded successfully!');
  }
});

app.listen(3000, () => {
  console.log('Server is listening on port 3000');
});

Sample code 2: multer in the server cluster which throws an error when uploading a file.

Error: Unexpected end of form... Emitted 'error' event on Multipart instance...

const express = require('express');
const multer = require('multer');
const cluster = require('cluster');
const { createServer } = require('http');
const { setupMaster, setupWorker } = require('@socket.io/sticky');
const { createAdapter, setupPrimary } = require('@socket.io/cluster-adapter');
const { Server } = require('socket.io');
const app = express();

const upload = multer({ dest: 'temp/' });

app.post('/upload', upload.single('image'), (req, res) => {
  if (!req.file) {
    res.status(400).send('No file uploaded.');
  } else {
    res.send('File uploaded successfully!');
  }
});

const numCPUs = require('os').cpus().length;

if (cluster.isPrimary) {
  console.log(`Master ${process.pid} is running`);

  const httpServer = createServer();

  setupMaster(httpServer, {
    loadBalancingMethod: 'least-connection',
  });

  setupPrimary();
  
  cluster.setupPrimary();

  httpServer.listen(3000, () =>
    console.log(`Worker ${process.pid} started and listening on port 3000`)
  );

  for (let i = 0; i < numCPUs; i++) {
    cluster.fork();
  }

  cluster.on('exit', (worker) => {
    console.log(`Worker ${worker.process.pid} died`);
    cluster.fork();
  });
} else {
  console.log(`Worker ${process.pid} started`);

  const httpServer = createServer(app);
  const io = new Server(httpServer, {
    path: '/socket',
    transports: ['websocket'],
    cors: {
      origin: '*',
      methods: ['GET', 'POST'],
    },
  });

  // use the cluster adapter
  io.adapter(createAdapter());

  // setup connection with the primary process
  setupWorker(io);
}

So guys, please help me solve the problem of using multer in the server cluster. Socket.io with sticky in sample 2 is what need in my project. Thanks.

0 Answers0