Skip to content

Request

The @server/request module gives access to the current HTTP request.

import request from "@server/request"
NameTypeDescription
methodstringHTTP method.
headersdict[string, []string]Request headers.
securebooltrue when the request uses TLS.
pathstringURL path.
urlstringFull request URL string.
hoststringRequest host.
ipstringRemote address.
import request from "@server/request"
import response from "@server/response"
response.write("Method: ")
response.write(request.method)
response.write("\nPath: ")
response.write(request.path)

Checks the request method.

Arguments:

NameTypeDescription
methodstringMethod to compare.

Returns: bool

import request from "@server/request"
import response from "@server/response"
if request.is("POST") {
response.write("Creating data")
} else {
response.write("Reading data")
}

Method comparison is case-insensitive.

Checks the exact Accept header value.

Arguments:

NameTypeDescription
contentTypestringContent type to check.

Returns: bool

if request.accepts("application/json") {
response.json({
"ok": true
})
}

Reads a dynamic route parameter.

Arguments:

NameTypeDescription
namestringParameter name.

Returns: string?

File:

users/[id].nubo

Code:

import request from "@server/request"
import response from "@server/response"
let id = request.param("id")
response.write("User: ")
response.write(id)

Reads a query string value.

Arguments:

NameTypeDescription
namestringQuery parameter name.

Returns: string?

URL:

/search?q=nubo

Code:

import request from "@server/request"
import response from "@server/response"
let q = request.query("q")
if isNil(q) {
response.write("Missing query")
} else {
response.write(q)
}

Reads a cookie value.

Arguments:

NameTypeDescription
namestringCookie name.

Returns: string?

import request from "@server/request"
import response from "@server/response"
let session = request.cookie("session")
if isNil(session) {
response.status(401)
response.write("Missing session")
}

Reads the request body as a string.

Returns: string

import request from "@server/request"
import response from "@server/response"
let raw = request.body()
response.write(raw)

The body read is limited by:

runtime:
server:
max_upload_size_byte: 1_000_000

Parses the request body as JSON.

Returns: any

import request from "@server/request"
import response from "@server/response"
let data = request.json()
response.json({
"received": data
})

If the body is empty, this returns nil.

Reads one form value.

Arguments:

NameTypeDescription
namestringForm field name.

Returns: string?

import request from "@server/request"
import response from "@server/response"
let username = request.form("username")
response.write(username)

Reads form or multipart form values into a dictionary.

Returns: dict?

import request from "@server/request"
import response from "@server/response"
let form = request.formData()
response.json(form)

Reads one uploaded file from multipart form data.

Arguments:

NameTypeDescription
namestringFile field name.

Returns: Stream?

The returned stream includes extra fields:

FieldTypeDescription
filenamestringUploaded filename.
sizeintFile size.
headerstringContent type header.
import request from "@server/request"
import response from "@server/response"
let file = request.file("avatar")
if isNil(file) {
response.status(400)
response.write("Missing file")
} else {
response.write("Uploaded: ")
response.write(file.filename)
}

The maximum uploaded file size is configured with:

runtime:
server:
max_upload_file_size: 5