一切正常,在我的代码中按预期运行,除非用户未上传文件,否则崩溃了我的节点应用程序。
在fs.rename部分出现错误,因为没有上传任何内容,应用无法重命名任何东西,并导致以下情况:
错误:
EPERM:不允许操作,重命名'C:\ Users \ xxx \ AppData \ Local \ Temp \ upload_0a145049089fa69e9df64f8d20abb362'->'C:\ Users \ xxx \ Dropbox \ Automatic NodeJS \ Login_Register + Submit-0.01 \ data \ 5be13231807fe33f14b2834a \ 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('/')
});
});
}
});