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.