synt_backend
Version:
Synt light-weight node backend service
66 lines (60 loc) • 1.76 kB
JavaScript
const express = require("express");
const { formidable } = require("formidable");
const router = express.Router();
const db = require("./../mysql/models/index");
const userHelper = require("./../helpers/user");
import { uploadFileToBucket } from "./../helpers/upload";
// routes
router.post("/", postUpload);
module.exports = router;
async function postUpload(req, res, next) {
const { t } = req;
let user = await userHelper.getAuthUser(req);
if (user) {
new Promise((resolve, reject) => {
let file;
let formData = {};
const form = formidable({ multiples: true }); // multipart required
form.parse(req, async (err, fields, files) => {
if (err) {
reject(err);
}
file = files.file[0];
});
form.on("field", (fieldName, fieldValue) => {
formData[fieldName] = fieldValue;
});
form.once("end", () => {
console.log("done");
resolve({ file, formData });
});
})
.then((response) => {
if (!response.file) {
return res.json({
success: false,
error: t("api.uploads.errors.fileError", "File error."),
});
}
if (!response.formData.bucket) {
return res.json({
success: false,
error: t("api.uploads.errors.awsBucketError", "AWS Bucket error."),
});
}
return uploadFileToBucket(response.file, response.formData.bucket)
.then((response) => {
return res.json(response);
})
.catch((error) => {
res.json({ success: false, error });
});
})
.catch((err) => {
if (err) {
next(err);
return;
}
});
}
}