я следующий код:Meteor/Узел WriteFile сбой сервера
Meteor.methods({
saveFile: function(blob, name, path, encoding) {
var path = cleanPath(path), fs = __meteor_bootstrap__.require('fs'),
name = cleanName(name || 'file'), encoding = encoding || 'binary',
chroot = Meteor.chroot || 'public';
// Clean up the path. Remove any initial and final '/' -we prefix them-,
// any sort of attempt to go to the parent directory '..' and any empty directories in
// between '/////' - which may happen after removing '..'
path = chroot + (path ? '/' + path + '/' : '/');
// TODO Add file existance checks, etc...
fs.writeFile(path + name, blob, encoding, function(err) {
if (err) {
throw (new Meteor.Error(500, 'Failed to save file.', err));
} else {
console.log('The file ' + name + ' (' + encoding + ') was saved to ' + path);
}
});
function cleanPath(str) {
if (str) {
return str.replace(/\.\./g,'').replace(/\/+/g,'').
replace(/^\/+/,'').replace(/\/+$/,'');
}
}
function cleanName(str) {
return str.replace(/\.\./g,'').replace(/\//g,'');
}
}
});
который я взял из этого проекта https://gist.github.com/dariocravero/3922137
код работает отлично, и он сохраняет файл, однако он повторяет вызов несколько раз и каждый раз, когда он вызывает сброс метеора с использованием окон версии 0.5.4. Консоль F12 выглядит следующим образом: . Метеорная консоль перебирает код запуска каждый раз, когда выполняется 503, и повторяет журналы консоли в функции saveFile.
Кроме того, в целевом каталоге миниатюра изображения продолжает отображаться, а затем отображается как сломанная, а затем действительная миниатюра, как если бы fs
записывал ее несколько раз.
Вот код, который вызывает функцию:
"click .savePhoto":function(e, template){
e.preventDefault();
var MAX_WIDTH = 400;
var MAX_HEIGHT = 300;
var id = e.srcElement.id;
var item = Session.get("employeeItem");
var file = template.find('input[name='+id+']').files[0];
// $(template).append("Loading...");
var dataURL = '/.bgimages/'+file.name;
Meteor.saveFile(file, file.name, "/.bgimages/", function(){
if(id=="goodPhoto"){
EmployeeCollection.update(item._id, { $set: { good_photo: dataURL }});
}else{
EmployeeCollection.update(item._id, { $set: { bad_photo: dataURL }});
}
// Update an image on the page with the data
$(template.find('img.'+id)).delay(1000).attr('src', dataURL);
});
},
Что вызывает сервер для сброса?
Вы уверены, что используете эту функцию только один раз? Как выглядит ваш звонок? –
@HubertOG Я обновил вопрос, включив код звонка – rickyduck