J'essaie de nettoyer mes contrôleurs en modulant mes fonctions de module multer
, ce qui me permet de télécharger plusieurs fichiers avec mes formulaires. Le code actuel présenté ci-dessous fonctionne, mais je veux mettre la fonction multer dans un nouveau fichier. Je supposais que simplement prendre la fonction et l'exporter à partir d'un autre fichier fonctionnerait, mais pour une raison quelconque, je frappe un délai lors de mon formulaire POST, malgré l'appel au console.log
au début du code multer
. Il semble que quelque chose dans ce code arrête le processus, mais aucun message d'erreur n'est lancé. Est-ce que quelqu'un voit ce qui pourrait causer l'erreur?Modularizing Multer Functionality Problème
Multer appelée dans le fichier d'itinéraire:
var aws = require('aws-sdk');
var multer = require('multer');
var multerS3 = require('multer-s3');
var moment = require('moment');
var uploadDate = new moment().format("YYYY-MM-DD");
var s3 = new aws.S3();
var options = {
Bucket: process.env.AWS_BUCKET,
Expires: 60
};
if(app.get('env') === 'production' || app.get('env') === 'staging'){
options.ACL = 'private'
} else {
options.ACL = 'public-read'
};
//////////Multer code being called
var upload = multer({
storage: multerS3({
s3: s3,
bucket: options.Bucket,
contentType: multerS3.AUTO_CONTENT_TYPE,
acl: options.ACL,
key: function(req, file, cb){
var fileNameFormatted = file.originalname.replace(/\s+/g, '-').toLowerCase();
cb(null, req.session.organizationId + '/' + uploadDate + '/' + fileNameFormatted);
}
}),
fileFilter: function(req, file, cb){
if(!file.originalname.match(/\.(jpg|jpeg|png|gif|csv|xls|xlsb|xlsm|xlsx)$/)){
return cb('One of your selected files is not supported', false);
}
cb(null, true);
}
}).array('fileUpload', 5);
///////Post route calling multer and rest of form submission
.post(function(req, res){
upload(req, res, function(){
if(err){
console.log('Multer upload error');
req.flash('error', err);
res.redirect(req.get('referer'));
return;
}
... MORE CODE ...
})
});
/controllers/multer.js, qui contient le code multer:
var express = require('express');
var app = express();
var aws = require('aws-sdk');
var multer = require('multer');
var multerS3 = require('multer-s3');
var moment = require('moment');
var s3 = new aws.S3();
var uploadDate = new moment().format("YYYY-MM-DD");
var options = {
Bucket: process.env.AWS_BUCKET,
Expires: 60,
//ContentType: req.query.file_type
};
if(app.get('env') === 'production' || app.get('env') === 'staging'){
options.ACL = 'private'
} else {
options.ACL = 'public-read'
};
module.exports = {
//Annotation file upload
annotationFileUpload: function(){
multer({
storage: multerS3({
s3: s3,
bucket: options.Bucket,
contentType: multerS3.AUTO_CONTENT_TYPE,
acl: options.ACL,
key: function(req, file, cb){
console.log("key called");
var fileNameFormatted = file.originalname.replace(/\s+/g, '-').toLowerCase();
cb(null, req.session.organizationId + '/' + uploadDate + '/' + fileNameFormatted);
}
}),
fileFilter: function(req, file, cb){
console.log("file filter called");
if(!file.originalname.match(/\.(jpg|jpeg|png|gif|csv|xls|xlsb|xlsm|xlsx)$/)){
return cb('One of your selected files is not supported', false);
}
cb(null, true);
}
}).array('fileUpload', 5);
}
}
Importation /controller/multer
et appelant la route:
var multerFile = require('./components/multer');
.post(function(req, res){
multerFile.annotationFileUpload(req, res, function(err){
if(err){
console.log('Multer upload error');
req.flash('error', err);
res.redirect(req.get('referer'));
return;
}
....MORE CODE....
})
});
Merci pour ce grand @mscdex catch! Je vous en suis reconnaissant! – cphill