запрос: скачать файл JSON, используя трубу - PullRequest
0 голосов
/ 17 сентября 2018

Я использую запрос на скачивание файлов. Сначала я хочу проверить код состояния и сохранить файл, только если код состояния равен 200. Он работает для моих двоичных файлов, но не для файлов json (у меня есть пустой файл) ...

download(url, localPath, callback) {

    if(fs.existsSync(localPath)) {
        return setImmediate(callback, null)
    }

    const downloadStream = request.get(url);

    downloadStream.on('error', err => callback(err));

    downloadStream.on('response', response => {
        if(200 === response.statusCode) {
            return callback(`Status code ${response.statusCode} not expected`);
        }

        const fileStream = fs.createWriteStream(localPath);
        fileStream.once('error', err => callback(err));
        fileStream.once('finish', () => callback(null));
        response.pipe(fileStream);
    });
}

Файловый сервер - это базовый экспресс, отправляющий файл с использованием sendFile

router.get('/api_path', (request, response) => {
    const filePath = path.join('/my_folder/', 'my_file.json');

    if(fs.existsSync(filePath)) {
        console.log('GET file 200', filePath);
        return response.sendFile(filePath, { headers: { 'content-type': 'application/octet-stream' } });
    } else {
        console.log('GET file 404', filePath);
        return response.status(404).send({ code: "NOK", error: { message: 'File does not exist' } });
    }
});

Я заметил, что прямой трубопровод downloadStream работает для файлов json, но с помощью этого метода я не могу обработать код состояния (поэтому, если выдается ошибка 404, мой файл json будет содержать ошибку ...)

Есть идеи?

...