req.файл не определен для запроса PUT в узле js с несколькими

#node.js #express #file #multer #uploading

Вопрос:

Я использую Multer в качестве промежуточного программного обеспечения для загрузки изображения . Мой запрос POST работает нормально , но когда дело доходит до запроса PUT, (req.файл) всегда не определен. даже (req.файл) изменен или нет , он всегда не определен . Я не смог найти , что я делаю не так .
Через postman я могу изменить имя файла изображения вручную, так как объект в необработанных данных даже там (req.файл) остается неопределенным. Но когда я попытался использовать данные формы, это не выявило изменений.

Файл Мультера

const мультер = требуется(«мультер»);

 // -- checking the file type --//
const MIME_TYPES = {
  "image/jpeg": "jpg",
  "image/png": "png",
  "image/jpg": "jpg",
};

const storage = multer.diskStorage({
  destination: (req, file, callback) => {
    callback(null, 'images');
  },
  filename: (req, file, callback) => {
    const extension = MIME_TYPES[file.mimetype];
    callback(null, Date.now()   "."   extension);
  }
});

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

ПОСТАВИТЬ Запрос

     exports.updatePost = async (req,res) => {
  let post = await Post.findOne({ where: { id: req.params.id } });
  console.log("updateing post",post);
let body = req.body;
let file = req.file;
console.log("request body",body);
console.log("request file",file);

  if (req.file) {
    console.log("request file",req.file);
    const filename = post.image.split("../images")[1];
    console.log("filename",filename);
    fs.unlink("images/"   filename, (error) => {
      if (error) {
        console.log(error);
      } else {
        console.log("successfully deleted local image");
      }
    });
    const url = req.protocol   "://"   req.get("host");
    post = {
      title: req.body.title,
      content: req.body.content,
      imageUrl: url   "/images/"   req.file.filename,
      
    };
  } else {
    console.log("file thinks nothing change in image",req.file);
    post = {
      title: req.body.title,
      content: req.body.content,
      imageUrl: req.body.imageUrl,
     
    };
  }

  try {
    const userId = req.userdata.userId;
    const response = await Post.update(post, { where: { id: req.params.id ,userId: userId} });
    res.status(201).json({ message: "Post updated successfully!" ,
  response : post });
  } catch (err) {
    console.log(err);
    return res.status(500).json({ message: err.message });
  }
};
 

app.js

 const express = require("express");
const path = require("path");
const cookieParser = require("cookie-parser");
const logger = require("morgan");
const DB = require("./module/models");

//*--------Database connect----------- ////

DB.sequelize.sync().then(() => {
  console.log("Drop and re-sync db.");
});
//*-----------------------------------------------------//

const indexRouter = require("./routes/index");
const postRouter = require("./routes/postRotes");
const commentRouter = require("./routes/comments_Routes");

const app = express();

//*------------CORS Header ------------------//

app.use((req, res, next) => {
  res.setHeader("Access-Control-Allow-Origin", "*");
  res.setHeader(
    "Access-Control-Allow-Headers",
    "Origin, X-Requested-With, Content, Accept, Content-Type, Authorization"
  );
  res.setHeader(
    "Access-Control-Allow-Methods",
    "GET, POST, PUT, DELETE, PATCH, OPTIONS"
  );
  next();
});
//*-----------------------------------------------------//
app.use(logger("dev"));
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, "public")));

app.use("/images", express.static(path.join(__dirname, "images")));
app.use("/api/auth/", indexRouter);
app.use("/api/posts", postRouter);
app.use("/api/comments", commentRouter);

module.exports = app;
 

Responce

 updateing post post {
  dataValues: {
    id: 65,
    title: ' new again again  ',
    content: ' newagain updated',
    imageUrl: 'http://localhost:3200/images/787ddedagain.png',
    createdAt: 2021-07-17T12:50:34.000Z,
    updatedAt: 2021-07-17T14:04:59.000Z,
    userId: 31
  },
  _previousDataValues: {
    id: 65,
    title: ' new again again  ',
    content: ' newagain updated',
    imageUrl: 'http://localhost:3200/images/787ddedagain.png',
    createdAt: 2021-07-17T12:50:34.000Z,
    updatedAt: 2021-07-17T14:04:59.000Z,
    userId: 31
  },
  _changed: Set(0) {},
  _options: {
    isNewRecord: false,
    _schema: null,
    _schemaDelimiter: '',
    raw: true,
    attributes: [
      'id',
      'title',
      'content',
      'imageUrl',
      'createdAt',
      'updatedAt',
      'userId'
    ]
  },
  isNewRecord: false
}
request body {
  title: ' new again',
  content: ' newagain updated',
  imageUrl: 'http://localhost:3200/images/787ddedagain.png'
}
request file undefined
file thinks nothing change in image undefined