Sending Outgoing HTTP responses
Interacting with outgoing HTTP responses from a Napkin function follows the same pattern as that of [requests].
For Python, response data is set via the built-in napkin.response
Python module. For Node.js, you must export a default function that takes two parameters,
req
(request) and res
(response). This was intentionally designed to mimic the Express API, which most Node.js developers
are already familiar with.
Python
from napkin import response
Node.js
export default (req, res) => {
// ...
}
Setting Headers
You can set outgoing HTTP headers by using the headers
field on napkin.response
(for Python) or the res
parameter
(for Node.js). With Node.js, you can also use the response object's append(key, value)
and set(key, value)
functions to set outgoing
headers. Multiple options are provided to better mimic the [Express API}(https://expressjs.com/en/api.html#res).
Python
from napkin import response
response.headers['my-header'] = 'hello'
Node.js
export default (res, req) => {
// two ways to set headers in JS
res.headers["my-header"] = "hello"
// or
res.append("my-header", "hello")
}
Response Payload
The way you send response data depends on the runtime you're using. For Python, you can send back
data by setting the napkin.response.body
attribute. For Node.js, you may use either the res.send
method or the res.json
method.
Python
napkin.response.body
can be set to either a str
type or
a dict
. If the value of napkin.response.body
is a dict
, Napkin will automatically configure the outgoing
response to include the Content-Type: application/json
header. If the value of napkin.response.body
is of
type str
, Napkin sets the Content-Type
header to text/html
. You can override these behaviors by setting the
Content-Type
header yourself.
from napkin import response
response.body = "Just some string"
# or
response.body = {
"message": "this is a string inside a dictionary"
}
Javascript
res.send
Use res.send
when you just want to send back text in the request body. Napkin will automatically set the
Content-Type
header to text/html
when res.send
is used, unless you set the Content-Type
header yourself.
export default (req, res) => {
res.send("This is just some text")
}
res.json
Use res.json
to send data in the response as a JSON object. When res.json
is used, Napkin will automatically set the
response's Content-Type
header to application/json
, unless you set the Content-Type
header yourself.
export default (req, res) => {
res.json({
myMessage: "Eat your vegetables!"
})
}
HTTP Status Codes
You can set the response status code to indicate whether or not your function successfully
processed the request. By default, the status code is set to 200
unless the function
fails execution, in which case the status code is set to 400
.
Python
from napkin import response
response.status_code = 204
Node.js
export default (req, res) => {
res.status(204)
}
CORS
Coming soon.