Next.js Nextjs-multer-TypeError:无法读取属性';传输编码';未定义的
我是Nextjs新手,试图通过multer上传文件,得到错误TypeError:无法读取未定义的属性“transfer encoding”。路由是受保护的,因此必须添加auth中间件,该中间件工作正常,但我无法确定在这种情况下如何使用multer 这是代码 multer.jsNext.js Nextjs-multer-TypeError:无法读取属性';传输编码';未定义的,next.js,server-side-rendering,multer,cloudinary,Next.js,Server Side Rendering,Multer,Cloudinary,我是Nextjs新手,试图通过multer上传文件,得到错误TypeError:无法读取未定义的属性“transfer encoding”。路由是受保护的,因此必须添加auth中间件,该中间件工作正常,但我无法确定在这种情况下如何使用multer 这是代码 multer.js import multer from "multer"; import path from "path"; // Multer config export default mult
import multer from "multer";
import path from "path";
// Multer config
export default multer({
storage: multer.diskStorage({}),
fileFilter: (req, file, cb) => {
let ext = path.extname(file.originalname);
if (ext !== ".jpg" && ext !== ".jpeg" && ext !== ".png") {
cb(new Error("File type is not supported"), false);
return;
}
cb(null, true);
},
});
cloudinary.js
import cloudinary from "cloudinary";
cloudinary.config({
cloud_name: process.env.CLOUDINARY_CLOUD_NAME,
api_key: process.env.CLOUDINARY_API_KEY,
api_secret: process.env.CLOUDINARY_API_SECRET,
});
export default cloudinary;
requireLogin.js(身份验证中间件)
pages/api/products.js
import Product from "../../models/Product";
import User from "../../models/User";
import initDB from "../../utils/db";
import requireLogin from "../../utils/requireLogin";
import cloudinary from "../../utils/cloudinary";
import upload from "../../utils/multer";
initDB();
export default async (req, res) => {
const createProduct = requireLogin((request, response) => {
upload.single("image")(async (req, {}, err) => {
try {
let user = await User.findById(req.user._id);
if (user.role !== "admin") {
return response.status(403).json({ error: "You must be an admin to add product" });
}
const result = await cloudinary.v2.uploader.upload(req.file.path);
req.body.image = result.secure_url;
req.body.cloudinary_id = result.public_id;
const product = new Product({
name,
price,
description,
image: req.body.image,
cloudinary_id: req.body.cloudinary_id,
});
await product.save();
response.json(product);
} catch (err) {
console.log(err);
}
});
});
switch (req.method) {
case "POST":
return createProduct(req, res);
}
};
export const config = {
api: {
bodyParser: false,
},
};
export default // rest of the code
问题解决了。我不知道必须将bodyParser设置为false pages/api/products.js
import Product from "../../models/Product";
import User from "../../models/User";
import initDB from "../../utils/db";
import requireLogin from "../../utils/requireLogin";
import cloudinary from "../../utils/cloudinary";
import upload from "../../utils/multer";
initDB();
export default async (req, res) => {
const createProduct = requireLogin((request, response) => {
upload.single("image")(async (req, {}, err) => {
try {
let user = await User.findById(req.user._id);
if (user.role !== "admin") {
return response.status(403).json({ error: "You must be an admin to add product" });
}
const result = await cloudinary.v2.uploader.upload(req.file.path);
req.body.image = result.secure_url;
req.body.cloudinary_id = result.public_id;
const product = new Product({
name,
price,
description,
image: req.body.image,
cloudinary_id: req.body.cloudinary_id,
});
await product.save();
response.json(product);
} catch (err) {
console.log(err);
}
});
});
switch (req.method) {
case "POST":
return createProduct(req, res);
}
};
export const config = {
api: {
bodyParser: false,
},
};
export default // rest of the code