В моем коде все работает как положено, кроме того, что если пользователь не загрузил файл, это приводит к сбою приложения моего узла.
Ошибка возникает в части fs.rename, так как ничего не загружено, приложение не может ничего переименовать и вызывает следующее:
Ошибка:
EPERM: операция не разрешена, переименуйте 'C: \ Users \ xxx \ AppData \ Local \ Temp \ upload_0a145049089fa69e9df64f8d20abb362' -> 'C: \ Users \ xxx \ Dropbox \ Automate NodeJS \ Login_Register + Submit - 0,01 \ data \ 5be13231b34aaf \ sdS9m '
Я испытываю трудности с поиском ошибки и способов ее устранения. Если кто-нибудь подскажет мне некоторые ресурсы о том, как обрабатывать огромные ошибки и как остановить процесс, пользователь ничего не загрузил, это было бы замечательно.
Это не производственное приложение или что-то в этом роде, просто я учусь работать с несколькими функциями и базой данных одновременно.
router.post('/submit', userisSubbed, userhasTime, (req, res, next0) => {
var userId = req.user._id;
var username = req.user.email;
var isCompleted = 'No'
var jobNumber = generator.generate({
length: 5,
numbers: true
});
// Validate
const errors = req.validationErrors();
if (errors) {
res.render('index', {
errors: errors
});}
else {
var form = new formidable.IncomingForm();
form.parse(req, function (err, fields, files) {
var userPath = req.user._id
var dir = './data/' + userPath + '/' + jobNumber + '/';
if (!fs.existsSync(dir)){
fs.mkdirSync(dir);
}else
{
console.log("Directory already exist");
}
var oldpath = files.filetoupload.path;
var newpath = dir + files.filetoupload.name;
// copy the file to a new location
fs.rename(oldpath, newpath, function (err) {
if (err) throw err;
console.log('renamed complete');
const newJob = new Job({
userId: userId,
username: username,
isCompleted: isCompleted,
filepath: newpath,
jobNumber: jobNumber,
});
Job.createJob(newJob, function(err, job){
if (err) throw err;
console.log(job);
});
req.flash('success_msg', 'Job Submitted...');
res.redirect('/')
});
});
}
});