上传不是函数中间件多路由问题

Upload is not a function middleware multer route problem

这是我的 multer 存储我想用会话用户名命名文件,这就是我的问题所在 如果我在外面连续上传我就不能再访问 req.session.user.username...

const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, "./uploads/usersprofile/");
  },
  filename: function (req, file, cb) {
    cb(
      null,
      file.fieldname +
        "_" +
        `${req.session.user.username}${path.extname(file.originalname)}`
    );
  },
});

这是我上传文件的路径,但它上传了文件但给我“上传不是函数”错误我不确定如何让它与 if (req.session.user && req.session.user.username) {} 一起工作,所以它不允许未登录用户上传加不显示“上传不是功能”错误

router.post(
  "/uploadpicture",
  multer({
    storage: storage,
    fileFilter: (req, file, cb) => {
      if (
        file.mimetype == "image/png" ||
        file.mimetype == "image/jpg" ||
        file.mimetype == "image/jpeg"
      ) {
        cb(null, true);
      } else {
        cb(null, false);
        return cb(new Error("Only .png, .jpg and .jpeg format allowed!"));
      }
    },
    limits: { fileSize: maxSize },
  }).single("avatar"),
  (req, res) => {
    if (req.session.user && req.session.user.username) {
      upload(req, res, function (err) {
        if (err instanceof multer.MulterError) {
          res.send(err);
        } else if (err) {
          res.send(err);
        }

      });
    } else {
      res.json({ loggedIn: false });
    }
  }
);

已通过创建指向“头像”的常量上传修复const upload = myMulter.single("avatar");

const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, "./uploads/usersprofile/");
  },
  filename: function (req, file, cb) {
    cb(
      null,
      file.fieldname +
        "_" +
        `${req.session.user.username}${path.extname(file.originalname)}`
    );
  },
});

const myMulter = multer({
  storage: storage,
  fileFilter: (req, file, cb) => {
    if (
      file.mimetype == "image/png" ||
      file.mimetype == "image/jpg" ||
      file.mimetype == "image/jpeg"
    ) {
      cb(null, true);
    } else {
      return cb(new Error("Only .png, .jpg and .jpeg format allowed!"));
    }
  },
  limits: { fileSize: maxSize },
});

const upload = myMulter.single("avatar");

router.post("/uploadpicture", (req, res) => {
  if (req.session.user && req.session.user.username) {
    upload(req, res, function (err) {
      if (err instanceof multer.MulterError) {
        res.send(err);
      } else if (err) {
        res.send(err);
      }
    });
  } else {
    res.json({ loggedIn: false });
  }
});