如何在控制器中使用多重功能而不是在路由中使用
How to use multer function in controller instead of using in route
我想在控制器文件中使用 multer
函数但是问题是 req.body
当我使用邮递员表单数据正文上传图像时未定义这是 link 到 code 我如何使用 multer
函数,但我想在我的控制器中使用它
我想如何使用它,您可以在下面的代码中看到
const multerHelper = require("../helpers/multer_helper");
Documents: async (req, res) => {
console.log(req.body)
if (!req.body.id) {
console.log(req.body)
logger.warn(error.MANDATORY_FIELDS);
return res.status(500).send(error.MANDATORY_FIELDS)
}
try {
multerHelper.createUserImage
let result = error.OK
logger.info(result);
return res.status(200).send(result)
} catch (err) {
logger.warn(err);
console.log(err);
return res.status(500).send(error.SERVER_ERROR)
}
}
但它会抛出类似 req.body
undefine
的错误
req.body 空图像
postman 表单数据图片
谁知道怎么做
你有解析器吗?
你如何解析数据?
您将需要使用能够为您提供此类数据的东西:
https://www.npmjs.com/package/express-fileupload
此包可帮助您解析表单数据和文件数据本身。
你只能在路由中使用multer
函数和对象,不能在控制器中使用如果你想在控制器中使用它你必须在控制器中编写存储和上传函数,这里我使用了multer
错误处理,我正在上传多张图片
Documents: async (req, res) => {
if (!req.headers.room_id) {
logger.warn(error.MANDATORY_FIELDS);
return res.status(500).send(error.MANDATORY_FIELDS)
}
try {
let storage = multer.diskStorage({
destination: function (req, file, cb) {
let id = req.headers.room_id;
let path = `tmp/daily_gasoline_report/${id}`;
fsextra.mkdirsSync(path);
cb(null, path);
},
filename: function (req, file, cb) {
// console.log(file);
let extArray = file.mimetype.split("/");
let extension = extArray[extArray.length - 1];
cb(null, file.fieldname + '-' + Date.now() + "." + extension);
}
})
var upload = multer({ storage: storage }).array('images', 100);
upload(req, res, function (err) {
if (err) {
console.log(err);
return res.end("Error uploading file.");
} else {
res.end("File has been uploaded");
}
});
let result = error.OK
logger.info(result);
return res.status(200).send(result)
} catch (err) {
logger.warn(err);
console.log(err);
return res.status(500).send(error.SERVER_ERROR)
}
}
我想在控制器文件中使用 multer
函数但是问题是 req.body
当我使用邮递员表单数据正文上传图像时未定义这是 link 到 code 我如何使用 multer
函数,但我想在我的控制器中使用它
我想如何使用它,您可以在下面的代码中看到
const multerHelper = require("../helpers/multer_helper");
Documents: async (req, res) => {
console.log(req.body)
if (!req.body.id) {
console.log(req.body)
logger.warn(error.MANDATORY_FIELDS);
return res.status(500).send(error.MANDATORY_FIELDS)
}
try {
multerHelper.createUserImage
let result = error.OK
logger.info(result);
return res.status(200).send(result)
} catch (err) {
logger.warn(err);
console.log(err);
return res.status(500).send(error.SERVER_ERROR)
}
}
但它会抛出类似 req.body
undefine
req.body 空图像
postman 表单数据图片
谁知道怎么做
你有解析器吗? 你如何解析数据? 您将需要使用能够为您提供此类数据的东西: https://www.npmjs.com/package/express-fileupload
此包可帮助您解析表单数据和文件数据本身。
你只能在路由中使用multer
函数和对象,不能在控制器中使用如果你想在控制器中使用它你必须在控制器中编写存储和上传函数,这里我使用了multer
错误处理,我正在上传多张图片
Documents: async (req, res) => {
if (!req.headers.room_id) {
logger.warn(error.MANDATORY_FIELDS);
return res.status(500).send(error.MANDATORY_FIELDS)
}
try {
let storage = multer.diskStorage({
destination: function (req, file, cb) {
let id = req.headers.room_id;
let path = `tmp/daily_gasoline_report/${id}`;
fsextra.mkdirsSync(path);
cb(null, path);
},
filename: function (req, file, cb) {
// console.log(file);
let extArray = file.mimetype.split("/");
let extension = extArray[extArray.length - 1];
cb(null, file.fieldname + '-' + Date.now() + "." + extension);
}
})
var upload = multer({ storage: storage }).array('images', 100);
upload(req, res, function (err) {
if (err) {
console.log(err);
return res.end("Error uploading file.");
} else {
res.end("File has been uploaded");
}
});
let result = error.OK
logger.info(result);
return res.status(200).send(result)
} catch (err) {
logger.warn(err);
console.log(err);
return res.status(500).send(error.SERVER_ERROR)
}
}