I work with nodejs on a social network project I am on the part of the image upload for the profile photo and to do this I installed the multer module more precisely, version 2.0.0-rc.1.So I set up a file upload.controller.js and n fihier routes.js which are listed below:
//upload.controller.js
const UserModel = require("../models/user.model");
const fs = require("fs");
const { promisify } = require("util");
const pipeline = promisify(require("stream").pipeline);
const { uploadErrors } = require("../utils/errors.utils");
module.exports.uploadProfil = async (req, res) => {
try {
if (
req.file.detectedMimeType != "image/jpg" &&
req.file.detectedMimeType != "image/png" &&
req.file.detectedMimeType != "image/jpeg"
)
throw Error("invalid file");
if (req.file.size > 500000) throw Error("max size");
} catch (err) {
const errors = uploadErrors(err);
return res.status(201).json({ errors });
}
const fileName = req.body.name + ".jpg";
await pipeline(
req.file.stream,
fs.createWriteStream(
`${__dirname}/../client/public/uploads/profil/${fileName}`
)
);
try {
await UserModel.findByIdAndUpdate(
req.body.userId,
{ $set : {picture: "./uploads/profil/" + fileName}},
{ new: true, upsert: true, setDefaultsOnInsert: true},
(err, docs) => {
if (!err) return res.send(docs);
else return res.status(500).send({ message: err });
}
);
} catch (err) {
return res.status(500).send({ message: err });
}
};
//routes.js
router.post("/upload", upload.single("file"), uploadController.uploadProfil);
but when I make my postman request I get the following result:
and subsequently this error in the terminal
node:internal/errors:496
ErrorCaptureStackTrace(err);
^
TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string or an instance of Buffer or URL. Received null
at TempWriteStream.WriteStream (node:internal/fs/streams:326:5)
at new TempWriteStream (C:\Users\Greysun\Desktop\mern-project-master\node_modules\fs-temp\lib\write-stream.js:6:15)
at Object.createWriteStream (C:\Users\Greysun\Desktop\mern-project-master\node_modules\fs-temp\lib\temp.js:121:10)
at Busboy.<anonymous> (C:\Users\Greysun\Desktop\mern-project-master\node_modules\multer\lib\read-body.js:70:27)
at Busboy.emit (node:events:514:28)
at Busboy.emit (C:\Users\Greysun\Desktop\mern-project-master\node_modules\busboy\lib\main.js:37:33)
at PartStream.<anonymous> (C:\Users\Greysun\Desktop\mern-project-master\node_modules\busboy\lib\types\multipart.js:214:13)
at PartStream.emit (node:events:514:28)
at HeaderParser.<anonymous> (C:\Users\Greysun\Desktop\mern-project-master\node_modules\dicer\lib\Dicer.js:50:16)
at HeaderParser.emit (node:events:514:28) {
code: 'ERR_INVALID_ARG_TYPE'
}
Node.js v18.17.1
please I do not fully master the multer module and I request your expertise Thank you very much.
I tried to install multer-s3 but it complicated the task