Req.file 是未定义的 nodejs multer

时间:2021-04-15 05:58:00

标签: javascript node.js express multer

我收到了这个意外错误 nodejs(Express)。 每当我控制台 req.file 或 req.files 时, undefined 都会被控制台

错误截图

Undefined error

邮递员配置

Post man configuration

代码

三个文件如下:

userController.js

<块引用>

注册

const express = require("express");
const profilePictureConfig = require("../multer/profilePictureConfig");
const userModel = require("../models/userModel");
const tokenRequired = require("../middleware/tokenRequired");
const genHash = require("../helper/genHash");
router = express.Router();

router
  .post("/signup", profilePictureConfig, async (req, res, next) => {
    let profile_picture = req.file?.path ? `\\${req.file.path}` : null;
    console.log("req file here");
    console.log(req.file); // Prints undefined
    console.log(req.files); // Prints undefined
    try {
      const hash = await genHash(req.body.password);
      let newUser = new userModel({
        ...req.body,
        password: hash,
        is_admin: false,
        profile_picture,
      });
      await newUser.save();
      res.status(200).send(newUser);
    } catch (e) {
      console.log(e.errors);
      next(e);
    }
  })

profilePictureConfig

<块引用>

处理所有multer配置

const multer = require("multer");

var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    return cb(null, "./public/pp");
  },
  filename: function (req, file, cb) {
    return cb(null, Date.now() + " -- " + file.originalname);
  },
});

module.exports = multer({ storage: storage }).single("profile_picture");

app.js

<块引用>

所有文件的父级

const express = require("express");
const app = express();
const tokenHandler = require("./middleware/tokenHandler");
const userController = require("./controller/userController");

app.use(express.json());
app.use("/public", express.static(__dirname + "/public"));

app.use(tokenHandler);
app.use("/user", userController);

app.use((req, res, next) => {
  const error = new Error("404! Not Found");
  error.status = 404;
  next(error);
});

app.use((err, req, res, next) => {
  console.log(err);
  res.status(err.status || 500);
  res.send({ error: err.message });
});


1 个答案:

答案 0 :(得分:0)

您的配置看起来不错。您能检查一下 pp 文件夹中是否有子文件夹 public?也许你没有创建那个文件夹,所以 Multer 不能在那里存储文件。