我有一个dropzone.js小部件嵌入在由node/express应用程序提供的网页中。这一切都很有名,所以我添加了提供上传限制的条件。有三种这样的限制; MIME类型(一个工作正常),上传的文件大小(也工作正常)和文件数量(这不正常工作)。在随后的声明中,Javascript变量是'undefined'
下面是代码片段:
var fileSize = req.file.size;
if(fileSize > 200000) {
return res.status(422).json({
error: "File too large."
});
}
var numfiles = fs_filecount(appwd+"data/free/req.session.freeFolderID");
if(numfiles>20) {
return res.status(422).json({
error: "Maximum file count reached."
});
}
我提出这两个任务和条件这样的,因为这是他们如何出现在.js文件。文件大小的赋值和有条件的工作很好,但文件计数不适用。对于fs_filecount功能的来源如下:
fs_filecount = function(path) {
fs.readdir(path,function(err, files){
if(err){
return console.error(err);
} else {
return files.length;
}
});
};
注意记录本文件数函数的返回值直接显示,这是工作的罚款。
失败的是在赋值numfiles之后,它是未定义的,所以文件计数测试总是失败,并且不会超过20个文件的约束。
编辑:简体子程序“fs_filecount”如下:
function fs_filecount(path) {
var count;
fs.readdir(path,function(err,files) {
if(err) throw err;
else {
count = files.length;
}
});
return count;
};
'FS。 readdir是一个_asnyc_函数,所以你传给'readdir'的回调函数在'fs_filecount'出口之后调用**,所以你不能使用'return'语句来返回'readdir'的结果m'fs_filecount'。您或者需要使用Promise作为返回值,或者使用'fs_filecount'回调。 –