javascript - 使用 mkdirsync 时节点中的异常
问题描述
我有一个代码。
try{
var Storage = multer.diskStorage({
destination: function (req, file, callback) {
fs.mkdirSync('/home/data/' + file.originalname, { recursive: true }, (error) => {
if (error) {
} else {
alert('Directory created');
console.log('Your directory is made!');
} ........
}catch(e){
console.log(e);
}
即使我有尝试捕获,当目录已经存在时,我的程序也会给出异常。我不明白为什么..节点崩溃并且没有处理。如果我遗漏了什么,你能告诉我吗
我得到的错误是
fs.js:885
return binding.mkdir(pathModule._makeLong(path),
^
Error: EEXIST: file already exists, mkdir '/home/data/dd_dd'
at Object.fs.mkdirSync (fs.js:885:18)
at DiskStorage.destination [as getDestination] (/home/server.js:16:7)
at DiskStorage._handleFile (/home/nodejsapplication/node_modules/multer/storage/disk.js:31:8)
at /home/node_modules/multer/lib/make-middleware.js:144:17
at allowAll (/home/node_modules/multer/index.js:8:3)
at wrappedFileFilter (/home/node_modules/multer/index.js:44:7)
at Busboy.<anonymous> (/home/node_modules/multer/lib/make-middleware.js:114:7)
at emitMany (events.js:147:13)
at Busboy.emit (events.js:224:7)
解决方案
该错误在异步代码中引发(您的回调multer.diskStorage
)。所以它不会被你的包装捕获try/catch
(它只能捕获同步错误)。
您还使用 的同步版本mkdir
,即mkdirSync
. 它不需要回调,因为它是同步的。
要么使用mkdir
,它需要一个带有error
参数的回调:
var Storage = multer.diskStorage({
destination: function (req, file, callback) {
fs.mkdir('/home/data/' + file.originalname, { recursive: true }, (error) => {
if (error) {} else {
console.log('Your directory is made!');
}
});
// ...
或保留mkdirSync
,并在其try/catch
周围添加:
var Storage = multer.diskStorage({
destination: function (req, file, callback) {
try {
fs.mkdirSync('/home/data/' + file.originalname, { recursive: true });
console.log('Your directory is made!');
} catch (e) {}
// ...
推荐阅读
- c# - 使用 azure graph api 获取具有用户所属组 id 的所有用户的列表
- sed - 在每行末尾附加特定字符
- c# - c#表单启动时放大图表
- python - 首次单线程运行相同的代码时,多处理不起作用
- android - kotlin 上 ProgressBar 后如何执行代码?
- flask - Flask - 无法从 API 调用返回响应
- c# - C#:将私钥从 XML 转换为 PEM 并将结果保存在文件中
- mysql - 全文搜索与索引检查完全相同的文本
- node.js - 如何创建文件并将其附加到电子邮件中?
- javascript - 将 HTML 脚本函数转换为 React JS