Передача читаемого потока с использованием суперагента

Я пытаюсь создать многоуровневое промежуточное программное обеспечение для передачи потокового файла от клиента к сторонней организации через суперагент.

const superagent = require('superagent');
const multer = require('multer');

// my middleware
function streamstorage(){
    function StreamStorage(){}

    StreamStorage.prototype._handleFile = function(req, file, cb){
        console.log(file.stream)  // <-- is readable stream
        const post = superagent.post('www.some-other-host.com');

        file.stream.pipe(file.stream);

        // need to call cb(null, {some: data}); but how
        // do i get/handle the response from this post request?
    }
    return new StreamStorage()
}

const streamMiddleware = {
    storage: streamstorage()
}

app.post('/someupload', streamMiddleware.single('rawimage'), function(req, res){
    res.send('some token based on the superagent response')
});

Я думаю, что это похоже на работу, но я не уверен, как справиться с ответом от суперагента POST запрос, так как мне нужно вернуть токен, полученный из запроса superagent.

я пробовал post.end(fn...) но видимо end а также pipe оба не могут быть использованы вместе. Мне кажется, что я неправильно понимаю, как работает трубопровод, или если то, что я пытаюсь сделать, является практичным.

1 ответ

Решение

Суперагент -х .pipe() Метод для загрузки (передача данных с удаленного хоста в локальное приложение).

Похоже, вам нужно в другом направлении: выгрузить из приложения на удаленный сервер. В суперагенте (начиная с v2.1) для этого нет метода, и он требует другого подхода.

У вас есть два варианта:

Самый простой, менее эффективный:

Скажите multer, что нужно буферизовать / сохранить файл, а затем загрузить весь файл, используя .attach(),

Сложнее всего "вручную" "передать" файл:

  1. Создайте дополнительный экземпляр с URL, методом и заголовками HTTP, которые вы хотите загрузить,
  2. Слушать data события во входящем потоке файлов и вызов суперагента .write() метод с каждой порцией данных.
  3. Слушать end событие в потоке входящего файла и вызов суперагента .end() способ прочитать ответ сервера.
Другие вопросы по тегам