chuikoffru
@chuikoffru
Full Stack JS Developer

Как сделать хранилище статики с помощью NodeJS?

Здравствуйте! С помощью passport.js делаю авторизацию пользователей, хочу сохранить их аватарку к себе на сервер. Создал директории /static/avatar/, назначил права записи, и написал простой скрипт формирования пути к картинке:
var avatar = function(email, id, url) 
    {
        var hash = crypto.createHash('md5')
            .update(email)
            .update(id)
            .digest('hex');
        
        var uri = hash.substr(29,3) + '/' + hash.substr(26,3) + '/' + hash.substr(0,26) + '/' + hash + '.jpg';
        
        var file = fs.createWriteStream(path.join(__dirname, '../static/avatar/' + uri));

        https.get(url, function(res) {
            console.log("statusCode: ", res.statusCode);
            console.log("headers: ", res.headers);
            res.on('data', function(d) {
                file.write(d);
            });
        }).on('error', function(e) {
            console.error(e);
        });
        
        return uri;
    }


Но получаю ошибку Error: ENOENT, open __dirname ' /static/avatar/041/f90/bd29c83187f7965108cdaa2574/bd29c83187f7965108cdaa2574f90041.jpg'.

Я понимаю что проблема из-за того что директорий нет, неужели нужно дописать еще строки создающие директории, или есть более простой вариант?
  • Вопрос задан
  • 215 просмотров
Решения вопроса 1
MarcusAurelius
@MarcusAurelius Куратор тега Node.js
автор Impress Application Server для Node.js
// И для этого есть https://www.npmjs.com/package/mkdirp
var mkdirp = require('mkdirp');
    
mkdirp('/tmp/foo/bar/baz', function (err) {
    if (err) console.error(err)
    else console.log('pow!')
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы