#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