Next.js Nextjs-multer-TypeError:无法读取属性';传输编码';未定义的

Next.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

我是Nextjs新手,试图通过multer上传文件,得到错误TypeError:无法读取未定义的属性“transfer encoding”。路由是受保护的,因此必须添加auth中间件,该中间件工作正常,但我无法确定在这种情况下如何使用multer

这是代码

multer.js

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