I am working on a blogging app API with express and MongoDB.
I am trying to add a post image for every blog post. Being new to express, I ran into this problem.
And i got this error: Cannot read properties of undefined (reading 'transfer-encoding'
Here is the post controller code code:
const asyncHandler = require("express-async-handler");
const imageModel = require("../models/imageModel");
const User = require("../models/userModel");
const Post = require("../models/postModel");
// storage
const Storage = multer.diskStorage({
destination: "storage",
filename: (res, req, file, cb) => {
cb(null, Date.now() file.originalname);
},
});
const upload = multer({
storage: Storage,
}).single("img");
// @desc Create a new post
// @route POST /api/posts/
// @access Private
const createPost = asyncHandler(async (res, req) => {
let img;
upload(req, res, async function (err) {
if (err) {
res.status(400);
throw new Error("Error uploading images.");
}
const newImage = await new imageModel({
img: {
data: req.file.filename,
contentType: "image/png",
},
});
newImage.save().then(console.log("Successfully uploaded"));
img = newImage;
});
console.log(img);
const { title, description, categories, nacCompatible, downloadURL } =
req.body;
if (!title || !description || !categories || !downloadURL) {
res.status(400);
throw new Error("Please add all the required fields.");
}
// Get user using the id in the JWT
const user = await User.findById(req.user.id);
if (!user) {
res.status(401);
throw new Error("User not found");
}
const post = await Post.create({
title,
description,
img,
categories,
nacCompatible,
downloadURL,
user: req.user._id,
status: "new",
});
res.status(201).json(post);
});
I also have const multer = require("multer");
at the top of the controller.
The create post function worked fine until I tried to add this upload image feature.
CodePudding user response:
This line: "createPost = asyncHandler(async (res, req)
"
You put the req
and res
in the wrong order