Nodejs Multer On Success获取返回值



我正在尝试使用NodeJS+ExpressJS+Multer上传图像,但我面临的问题是,我无法从Multer的upnode函数中获得返回值,因此我可以在数据库中设置图像名称或抛出错误

const express = require("express");
const router = express.Router();
const multer = require("multer");
const path = require("path");
const auth = require("../../middleware/auth");
const photoModel = require("../../models/Photo");
const upload = multer({
storage: multer.diskStorage({
destination: "./client/public/uploads/",
filename: function(req, file, callback) {
callback(null, "IMAGE-" + Date.now() + path.extname(file.originalname));
}
}),
limits: { fileSize: 1000000 }
}).single("myImage");
router.post("/upload/:row", async (req, res) => {
const id = "1";
const { row } = req.params;
const result = await upload(req, res, err => {
console.log("Request ---", req.body);
console.log("Request file ---", req.file); //Here you get file.
/*Now do where ever you want to do*/
// if (!err) return res.send(200).end();
if (!err) {
return true;
} else {
return false;
}
});
console.log("result ", result);
if (result) {
const check = photoModel.SetImage(id, row);
if (check) console.log(check);
else {
console.log(check);
}
}
});

我希望得到结果返回true或false,但实际输出是结果未定义的

我确实找到了解决问题的方法,并将multer设置为中间件

const express = require("express");
const router = express.Router();
const multer = require("multer");
const path = require("path");
const auth = require("../../middleware/auth");
const photoModel = require("../../models/Photo");
const fs = require("file-system");
var storage = multer.diskStorage({
destination: function(req, file, cb) {
const { id } = req.user;
const { row } = req.params;
const dir = `./client/public/uploads/${id}/`;
fs.exists(dir, exists => {
if (!exists) {
return fs.mkdir(dir, error => cb(error, dir));
}
return cb(null, dir);
});
},
filename: function(req, file, callback) {
const { row } = req.params;
console.log(row);
if (row === "profile_Image")
return callback(null, "profile" + path.extname(file.originalname));
else
return callback(
null,
"IMAGE-" + Date.now() + path.extname(file.originalname)
);
}
});
// @route   Post api/profle/upload
// @desc    upload user images
// @access  Private
var upload = multer({ storage: storage });
router.post("/upload/:row", [auth, upload.single("myImage")], (req, res) => {
const file = req.file;
const { row } = req.params;
const id = req.user.id;
if (!file) {
const error = new Error("Please upload a file");
error.httpStatusCode = 400;
return next(error);
} else {
const check = photoModel.SetImage(id, row, file.filename);
if (check) {
return res.json({
success: true,
errorMsg: "Your image hass been uploaded"
});
} else {
return res.json({
success: false,
errorMsg: "There is an error on upload image"
});
}
}
});

希望将来能帮助到别人;(

最新更新