# Response
Mali Response class encasulates the response of a call. Clients to not create this. Mali does it for us. It is accessible via the context response
property. Some ctx
properties and methods are just delegated to the response
object. It allows us to sent the response payload, alongside any header and trailer metadata.
# Example
async function sayHello(ctx) {
// set some value to the response header metadata
ctx.response.set('foo', 'bar')) // 'bar'
console.log(ctx.response.type) // 'unary'
// set some value to the response trailer / status metatada
ctx.response.setStatus('biz', 'baz')
// set the actual payload
ctx.response.res = { message: `Hello ${ctx.req.name}!` }
}
# Properties
# response.call
The internal gRPC call instance reference.
# response.type
The call type. One of CallType
(opens new window) enums.
console.log(ctx.response.type) // 'unary'
# response.metadata
The call's response header metadata plain object.
ctx.response.set('foo', 'bar')
console.log(ctx.response.metadata) // { 'foo': 'bar' }
# response.status
The call's response status / trailer metadata plain object.
ctx.response.setStatus('biz', 'baz')
console.log(ctx.response.status) // { biz: 'baz' }
# response.res
The actual call response payload object.
This is set only in case of DUPLEX
calls, to the the gRPC call
reference itself.
In all other cases set the res
property to the actual response message / object in case of UNIRY
and REQUEST_STREAM
calls, and to the output stream in case of RESPONSE_STREAM
calls.
When a stream it is automatically piped (opens new window) into the call.
ctx.response.res = { foo: 'bar' }
For stream response calls:
ctx.response.res = createResponseStream()
Since in DUPLEX
calls res
is just the call
instance itself, we can use it to write back to the client:
ctx.response.res.write({ foo: 'bar' })
# Functions
# response.get()
Get a response header metadata value.
console.log(ctx.response.get('foo')) // 'bar'
# response.set()
Set a response header metadata value.
ctx.response.set('foo', 'bar')
Or using an object:
ctx.response.set({
foo: 'bar'
})
# response.getMetadata()
Get response header metadata as a grpc.Metadata
object.
# response.sendMetadata()
Send response header metadata. Optionally provide header metadata object directly as an argument and that is set and sent. If param is not provided sendMetadata
sends the existing metadata in the response. If it is provided existin metadata is cleared and is set to the object adn then sent.
ctx.response.sendMetadata({
foo: 'bar'
})
# reponse.setStatus()
Set a reponse status / trailer metadata value.
ctx.response.setStatus('foo', 'bar')
Or using an object
ctx.response.setStatus({
foo: 'bar'
})
# reponse.getStatus()
Get a reponse status / trailer metadata value.
console.log(ctx.response.getStatus('foo')) // 'bar'
# reponse.getStatusMetadata()
Get reponse status / trailer metadata as a grpc.Metadata
object.