요청 스트림 및 비동기 처리로 연결이 닫혔습니다.

데니스 프레 자토

HTTP 요청에서 오는 스트림을 처리하는 데 문제가 있습니다. 핸들러는 스트림에서 데이터를 수집하고 응답을 보내기 전에 비동기 작업을 수행합니다.

스트림 데이터가 수집되는 즉시 HTTP 연결 someAsyncStuff이 호출 되기 직전에 닫힙니다 .

이것은 문제를 재현하는 예입니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

import * as Busboy from 'busboy'
import * as express from 'express'
import { pipeline } from 'stream'
import concat = require('concat-stream')

const app = express()

app.post('/', (req, res) => {
  const busboy = new Busboy({ headers: req.headers })

  busboy.on('file', (_, file) => {
    pipeline(
      file,
      concat(buffer =>
        someAsyncStuff(buffer.toString())
          .then(length => res.send({ length }))
          .catch(err => res.status(500).send(err.message))
      ),
      err => {
        if (err) res.status(500).send(err.message)
      }
    )
  })

  pipeline(req, busboy, err => {
    if (err) res.status(500).send(err.message)
  })
})

function someAsyncStuff(s: string): Promise<number> {
  return new Promise(resolve => setTimeout(() => resolve(s.length), 1))
}

app.listen('3000')
의미

req.pipe 사용이 작동하는 것 같습니다.

import Busboy from 'busboy'
import express from 'express'
import { pipeline } from 'stream'
import concat from 'concat-stream'

const app = express()

app.post('/', (req, res) => {
  const busboy = new Busboy({ headers: req.headers })

  busboy.on('file', (_, file) => {
    pipeline(
      file,
      concat(buffer =>
        someAsyncStuff(buffer.toString())
          .then(length => res.json({ length }))
          .catch(err => res.status(500).send(err.message))
      ),
      err => {
        if (err) res.status(500).send(err.message)
      }
    )
  })
  req.pipe(busboy);
})

function someAsyncStuff(s) {
  return new Promise(resolve => setTimeout(() => resolve(s.length), 1000))
}

app.listen('3000')

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

SocketException으로 인해 단순 내부 HTTP GET 요청 실패 : 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다.

분류에서Dev

오류 : Adb 연결 오류 : 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다.

분류에서Dev

기본 연결이 닫혔습니다.-웹 서비스

분류에서Dev

Entity Framework : 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다.

분류에서Dev

Python 예외 : 오류 : [Errno 10054] 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다.

분류에서Dev

.NET UDPClient : 오류 : 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다.

분류에서Dev

`Errno :: ECONNRESET : 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다. -SSL_connect`

분류에서Dev

흠 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다.

분류에서Dev

authorize.net의 원격 호스트에 의해 기존 연결이 강제로 닫혔습니다.

분류에서Dev

동시 요청 실패- "세션이 닫혔습니다!"

분류에서Dev

Windows Azure-전송 연결에서 데이터를 읽을 수 없음 : 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다.

분류에서Dev

문자열 스트림 결합 : 스트림이 이미 작동되었거나 닫혔습니다.

분류에서Dev

localhost에서 mongorestore를 실행하는 동안 "기존 연결이 원격 호스트에 의해 강제로 닫혔습니다."

분류에서Dev

체크 아웃 할 수 없습니다. "기존 연결이 원격 호스트에 의해 강제로 닫혔습니다."

분류에서Dev

이 예외가 발생하지 않는 이유 : 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다.

분류에서Dev

RuntimeError : 이벤트 루프가 비동기 파이썬에서 닫혔습니다.

분류에서Dev

오류 : 업스트림에서 응답 헤더를 읽는 동안 업스트림 연결이 너무 일찍 닫혔습니다.

분류에서Dev

수신 데이터를 수신 할 때 "기존 연결이 원격 호스트에 의해 강제로 닫혔습니다."

분류에서Dev

WCF에서 IEnumerable을 반환하는 방법은 무엇입니까? 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다.

분류에서Dev

공급자 : SSL 공급자, 오류 : 0-기존 연결이 원격 호스트에 의해 강제로 닫혔습니다.

분류에서Dev

System.Net.Sockets.SocketException (0x80004005) : 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다.

분류에서Dev

"기존 연결이 원격 호스트에 의해 강제로 닫혔습니다"에 대한 Boost.Asio 오류 코드

분류에서Dev

실행 중이지만 테스트 중이 아닌 공기 흐름 "이 연결이 닫혔습니다."

분류에서Dev

Python3 asyncio 동시 HTTP 가져 오기 요청으로 연결이 닫히지 않습니다.

분류에서Dev

java.sql.SQLException : 첫 번째 데이터베이스 쿼리 후 연결이 이미 닫혔습니다.

분류에서Dev

연락처 및 마이크 요청 액세스는 iOS 9에서 작동하지 않습니다.

분류에서Dev

MSDeploy "기본 연결이 닫혔습니다. 연결이 예기치 않게 닫혔습니다."

분류에서Dev

mocha 테스트 nodejs mssql-연결이 닫혔습니다.

분류에서Dev

스프링 보안 : 리스너 인스턴스에 대한 컨텍스트 파괴 이벤트 및 BeanFactory가 초기화되지 않았거나 이미 닫혔습니다.

Related 관련 기사

  1. 1

    SocketException으로 인해 단순 내부 HTTP GET 요청 실패 : 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다.

  2. 2

    오류 : Adb 연결 오류 : 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다.

  3. 3

    기본 연결이 닫혔습니다.-웹 서비스

  4. 4

    Entity Framework : 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다.

  5. 5

    Python 예외 : 오류 : [Errno 10054] 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다.

  6. 6

    .NET UDPClient : 오류 : 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다.

  7. 7

    `Errno :: ECONNRESET : 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다. -SSL_connect`

  8. 8

    흠 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다.

  9. 9

    authorize.net의 원격 호스트에 의해 기존 연결이 강제로 닫혔습니다.

  10. 10

    동시 요청 실패- "세션이 닫혔습니다!"

  11. 11

    Windows Azure-전송 연결에서 데이터를 읽을 수 없음 : 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다.

  12. 12

    문자열 스트림 결합 : 스트림이 이미 작동되었거나 닫혔습니다.

  13. 13

    localhost에서 mongorestore를 실행하는 동안 "기존 연결이 원격 호스트에 의해 강제로 닫혔습니다."

  14. 14

    체크 아웃 할 수 없습니다. "기존 연결이 원격 호스트에 의해 강제로 닫혔습니다."

  15. 15

    이 예외가 발생하지 않는 이유 : 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다.

  16. 16

    RuntimeError : 이벤트 루프가 비동기 파이썬에서 닫혔습니다.

  17. 17

    오류 : 업스트림에서 응답 헤더를 읽는 동안 업스트림 연결이 너무 일찍 닫혔습니다.

  18. 18

    수신 데이터를 수신 할 때 "기존 연결이 원격 호스트에 의해 강제로 닫혔습니다."

  19. 19

    WCF에서 IEnumerable을 반환하는 방법은 무엇입니까? 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다.

  20. 20

    공급자 : SSL 공급자, 오류 : 0-기존 연결이 원격 호스트에 의해 강제로 닫혔습니다.

  21. 21

    System.Net.Sockets.SocketException (0x80004005) : 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다.

  22. 22

    "기존 연결이 원격 호스트에 의해 강제로 닫혔습니다"에 대한 Boost.Asio 오류 코드

  23. 23

    실행 중이지만 테스트 중이 아닌 공기 흐름 "이 연결이 닫혔습니다."

  24. 24

    Python3 asyncio 동시 HTTP 가져 오기 요청으로 연결이 닫히지 않습니다.

  25. 25

    java.sql.SQLException : 첫 번째 데이터베이스 쿼리 후 연결이 이미 닫혔습니다.

  26. 26

    연락처 및 마이크 요청 액세스는 iOS 9에서 작동하지 않습니다.

  27. 27

    MSDeploy "기본 연결이 닫혔습니다. 연결이 예기치 않게 닫혔습니다."

  28. 28

    mocha 테스트 nodejs mssql-연결이 닫혔습니다.

  29. 29

    스프링 보안 : 리스너 인스턴스에 대한 컨텍스트 파괴 이벤트 및 BeanFactory가 초기화되지 않았거나 이미 닫혔습니다.

뜨겁다태그

보관