それがこの問題に発売されている場合、このコードは正常に動作します:なぜこのコードはミドルウェアとして機能し、機能として機能しませんか?
私が書く場合app.route('/upload').post(rulesUpload.upload(obj),function (request, response, next) {
response.status(200).end('File Caricato/i Con Successo');
});
ない:
app.route('/upload').post(function(request, response, next) {
rulesUpload.upload(obj);
response.status(200).end('File Caricato/i Con Successo');
});
var formidable = require('formidable'),
util = require('util'),
fs = require('fs-extra');
var defaultMaxSize = 3;
var defaultMaxFiles = 1;
exports.upload = function(obj) {
return function(req, res, cb) {
var check = '';
var errors = {};
for (key in req.files) {
if ((obj.required != undefined && req.files[key].size == 0) && (obj.required[key] != undefined && obj.required[key]))
check = "Il file " + key + " è obbligatorio!";
else if (obj.destination[key] == undefined)
check = 'Il file ' + key + ' non è gestito correttamente.';
else if (obj.files[key] != undefined && obj.files[key] < req.files[key].length)
check = 'Non si possono inserire più di ' + obj.files[key] + ' file per il campo ' + key;
else if (obj.files[key] == undefined && defaultMaxFiles < req.files[key].length)
check = 'Non si possono inserire più di ' + defaultMaxFiles + ' file per il campo ' + key;
else {
var new_location = obj.destination[key] + '/';
var numFiles = 1;
if (req.files[key].length != undefined)
numFiles = req.files[key].length;
if (numFiles == 1)
req.files[key] = {
0: req.files[key]
};
for (var i = 0; i < numFiles; i++) {
var file_name = '';
if (obj.filename[key] != undefined) {
file_name = obj.filename[key].name;
if (file_name == undefined)
file_name = req.files[key][i].name.substring(0, req.files[key][i].name.lastIndexOf("."));
if (obj.filename[key].prefix != undefined)
file_name = obj.filename[key].prefix + file_name;
if (obj.filename[key].suffix != undefined)
file_name += obj.filename[key].suffix;
file_name += req.files[key][i].name.substring(req.files[key][i].name.lastIndexOf('.'), req.files[key][i].name.length);
} else file_name = req.files[key][i].name;
if (obj.fileTypes[key] != undefined) {
var re = new RegExp(obj.fileTypes[key]);
var mimetype = re.test(req.files[key][i].type);
var extname = re.test(req.files[key][i].name.toLowerCase());
if (!mimetype && !extname)
check = "Sono Accettate solo le seguenti estensioni: " + obj.fileTypes[key] + " per il campo " + key;
}
if (obj.fileSize[key] != undefined && req.files[key][i].size > obj.fileSize[key] * 1024 * 1024)
check = 'I file ' + key + ' non possono superare i ' + obj.fileSize[key] + " MB";
if (obj.fileSize[key] == undefined && req.files[key][i].size > defaultMaxSize * 1024 * 1024)
check = 'I file ' + key + ' non possono superare di default i ' + defaultMaxSize + " MB";
if (check == '') {
var temp_path = req.files[key][i].path;
fs.move(temp_path, new_location + file_name, function (err) {
if (err) { }
else { }
});
} else {
errors[key] = check;
}
if (check != "")
errors[key] = check;
}
if (check != "")
errors[key] = check;
}
if (check != "")
errors[key] = check;
check = '';
}
if (check != "")
errors[key] = check;
check = '';
if (errors != {})
return cb(util.inspect(errors));
else return cb(null);
};
return;
};
PS:スーパーユーザのために、私はバグがあることを知っています私は解決策を見つけることができず、それは二次的な問題です。
P.S.2:好奇心の高いため、送信されたファイルをアップロードできるかどうかをチェックするためにこのコードを使用します。
それは 'rulesUpload.uploadは(OBJ)(要求、応答、次)になるだろうので、あなたの方法は、関数を返す;' –