Home / Function/ sendStream() — fastify Function Reference

sendStream() — fastify Function Reference

Architecture documentation for the sendStream() function in reply.js from the fastify codebase.

Entity Profile

Dependency Diagram

graph TD
  3d4cff63_882d_17c7_3219_d30292baf81d["sendStream()"]
  4bcd71dc_1ec2_5fe8_b8ff_4a371e392925["reply.js"]
  3d4cff63_882d_17c7_3219_d30292baf81d -->|defined in| 4bcd71dc_1ec2_5fe8_b8ff_4a371e392925
  8460cb7c_51e5_baba_0f16_9ea8d190d139["onSendEnd()"]
  8460cb7c_51e5_baba_0f16_9ea8d190d139 -->|calls| 3d4cff63_882d_17c7_3219_d30292baf81d
  13e2d38d_ce6d_5fec_32a3_0640002b60a9["sendStreamTrailer()"]
  3d4cff63_882d_17c7_3219_d30292baf81d -->|calls| 13e2d38d_ce6d_5fec_32a3_0640002b60a9
  18ed21df_f31c_a1a7_f5d2_fd033a6e96bc["logStreamError()"]
  3d4cff63_882d_17c7_3219_d30292baf81d -->|calls| 18ed21df_f31c_a1a7_f5d2_fd033a6e96bc
  d1d39f22_2d9a_4ca3_4bbe_11322ac6d36b["onErrorHook()"]
  3d4cff63_882d_17c7_3219_d30292baf81d -->|calls| d1d39f22_2d9a_4ca3_4bbe_11322ac6d36b
  style 3d4cff63_882d_17c7_3219_d30292baf81d fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

lib/reply.js lines 756–809

function sendStream (payload, res, reply) {
  let sourceOpen = true
  let errorLogged = false

  // set trailer when stream ended
  sendStreamTrailer(payload, res, reply)

  eos(payload, { readable: true, writable: false }, function (err) {
    sourceOpen = false
    if (err != null) {
      if (res.headersSent || reply.request.raw.aborted === true) {
        if (!errorLogged) {
          errorLogged = true
          logStreamError(reply.log, err, reply)
        }
        res.destroy()
      } else {
        onErrorHook(reply, err)
      }
    }
    // there is nothing to do if there is not an error
  })

  eos(res, function (err) {
    if (sourceOpen) {
      if (err != null && res.headersSent && !errorLogged) {
        errorLogged = true
        logStreamError(reply.log, err, res)
      }
      if (typeof payload.destroy === 'function') {
        payload.destroy()
      } else if (typeof payload.close === 'function') {
        payload.close(noop)
      } else if (typeof payload.abort === 'function') {
        payload.abort()
      } else {
        reply.log.warn('stream payload does not end properly')
      }
    }
  })

  // streams will error asynchronously, and we want to handle that error
  // appropriately, e.g. a 404 for a missing file. So we cannot use
  // writeHead, and we need to resort to setHeader, which will trigger
  // a writeHead when there is data to send.
  if (!res.headersSent) {
    for (const key in reply[kReplyHeaders]) {
      res.setHeader(key, reply[kReplyHeaders][key])
    }
  } else {
    reply.log.warn('response will send, but you shouldn\'t use res.writeHead in stream mode')
  }
  payload.pipe(res)
}

Domain

Subdomains

Defined In

Called By

Frequently Asked Questions

What does sendStream() do?
sendStream() is a function in the fastify codebase, defined in lib/reply.js.
Where is sendStream() defined?
sendStream() is defined in lib/reply.js at line 756.
What does sendStream() call?
sendStream() calls 3 function(s): logStreamError, onErrorHook, sendStreamTrailer.
What calls sendStream()?
sendStream() is called by 1 function(s): onSendEnd.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free