- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
// storage -> user -> project -> task -> attachments
var userPath = path.join(basePath, userId);
var projectPath = path.join(userPath, projectId);
var taskPath = path.join(userPath, taskId);
// happy mkdir... happy mkdir!
try {
try {
fs.statSync(taskPath); // task folder exists
}
catch (err) {
try {
fs.statSync(projectPath); // project folder exists
}
catch (err) {
try {
fs.statSync(userPath); // user folder exists
}
catch (err) {
fs.mkdirSync(userPath);
}
fs.mkdirSync(projectPath);
}
fs.mkdirSync(taskPath);
}
}
catch (err) {
return next(err);
}
Есть сервер на nodejs и программка типа менеджера задач. Надо было реализовать аттачменты к задачам. Есть папка storage, а в ней заводим папочки по иерархии, как в первом комментарии... и, видимо я что-то не понимаю в работе с файловой системой из под ноды :(
1024-- 23.05.2015 17:01 # 0
А вот с созданием папок действительно всё так печально.
Но есть https://github.com/substack/node-mkdirp
Alendorff 23.05.2015 17:07 # 0
1024-- 23.05.2015 17:18 # +1
Хм, и правда. Раньше такого не было...
Выходит, если переносить их советы про open на mkdir, надо будет просто создавать папку и ловить исключение :(
Хотели создать папку? Она уже создана, всё уже хорошо, поэтому надо бросить исключение, чтобы программист не расслаблялся.
bormand 23.05.2015 17:20 # 0
И это, имхо, правильно, чтобы на race condition не залететь.
> Она уже создана, всё уже хорошо, поэтому надо бросить исключение
А вот в этом случае исключения не должно быть: пытались создать папку, но она уже есть - ну и заебись. Исключение должно вылететь если там файл с таким же именем, прав нету, не существует родительская папка и т.п.
Но это теория, на практике же нодовцы запросто могут обосраться и кинуть исключение, если папка уже существует.
1024-- 23.05.2015 17:24 # 0
Так они и делают, окаянные (по крайней мере, в v0.10.32)
bormand 23.05.2015 17:27 # 0
Alendorff 23.05.2015 17:29 # 0
Error: EEXIST, file already exists.
Правда если существует не папка, а файл, то код тот же...
bormand 23.05.2015 17:30 # 0
Вот только не вылетает ли то же самое исключение, если там не папка, а файл с таким именем?
Мда. Ну всё, приехали.
Alendorff 23.05.2015 17:31 # +1
Конечно, обычно файлы имеют расширение и тут конфликта с папкой не будет. Но если расширения нет, то не пройдет такой номер.
Stallman 25.05.2015 23:03 # +1
ССЗБ.
bormand 26.05.2015 06:20 # +1
kegdan 26.05.2015 06:30 # 0
Alendorff 26.05.2015 06:41 # 0
bormand 26.05.2015 07:42 # 0
Alendorff 26.05.2015 07:44 # 0