首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nextjs - multer - TypeError:无法读取未定义的属性“”transfer-encoding“”

Nextjs - multer - TypeError:无法读取未定义的属性“”transfer-encoding“”
EN

Stack Overflow用户
提问于 2020-11-03 01:01:36
回答 1查看 227关注 1票数 0

我是Nextjs的新手,尝试通过multer上传文件,得到错误TypeError: Cannot read property 'transfer-encoding‘of undefined。路由是受保护的,所以必须添加身份验证中间件,它工作得很好,但我不知道如何在这种情况下使用multer。

下面是代码。

multer.js

代码语言:javascript
复制
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

代码语言:javascript
复制
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 (身份验证中间件)

代码语言:javascript
复制
import jwt from "jsonwebtoken";

const requireLogin = (fn) => {
  return (req, res) => {
    const { authorization } = req.headers;
    if (!authorization) {
      return res.status(403).json({ error: "Restricted access" });
    }
    try {
      const decode = jwt.verify(authorization, process.env.JWT_SECRET);
      req.user = decode;
      return fn(req, res);
    } catch (err) {
      console.log(err);
      return res.status(500).json({ error: "Something went wrong" });
    }
  };
};

export default requireLogin;

pages/api/products.js

代码语言:javascript
复制
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);    
  }
};
EN

回答 1

Stack Overflow用户

发布于 2020-11-03 02:08:48

问题解决了。我不知道我必须将bodyParser设置为false

pages/api/products.js

代码语言:javascript
复制
export const config = {
  api: {
    bodyParser: false,
  },
};

export default // rest of the code
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64649962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档