Hoppa till innehållet
Stackship-dokumentation English

FunktionerAnvändareMaskinöversatt

Referens för funktionshanteraren

Vad en Node.js-funktions hanterare tar emot och returnerar, de svar som plattformen ger i dess ställe, dess tidsgräns och dess miljö.

Den här sidan beskriver körmiljön Node.js, den som funktioner kan byggas för från portalen i dag — se Körmiljöer.

Hanteraren

Koden sparas som handler.js och laddas som en ES-modul på Node.js 22. Körmiljön anropar modulens standardexport — eller, om den saknas, en export som heter handler, Handle eller run — med en förfrågan och en kontext, och skickar tillbaka det som den returnerar:

javascript
export default async function (req, ctx) {
  ctx.log(`${req.method} ${req.path}`);
  const name = req.query.name ?? req.body?.name ?? "World";
  return { status: 200, body: { message: `Hello, ${name}!` } };
}
  • Skriv JavaScript. Typannoteringar kompileras inte bort, så syntax som bara finns i TypeScript gör att funktionen misslyckas när den startar.
  • Funktionen är en enda fil: bara Node.js inbyggda moduler kan importeras.
  • En modul som inte har någon funktion att anropa gör att funktionen misslyckas när den startar.

Förfrågan

Fält Innehåll
method HTTP-metoden, till exempel GET
path Hela sökvägen, med rutten: /hello, eller /hello/orders/42 för en sökväg under rutten
query Frågeparametrarna som strängar; för en parameter som anges flera gånger, det sista värdet
headers Förfrågans huvuden, med namnen i gemener
body Kroppen tolkad som JSON när Content-Type innehåller application/json; annars, och när kroppen inte är giltig JSON, kroppen som en sträng
rawBody Kroppen som en UTF-8-sträng

Utöver anroparens huvuden får funktionen X-Stackship-Function-Name, X-Stackship-Trigger-Type och huvudena X-Forwarded-* från namnutrymmets proxy. En funktion med autentisering påslagen får också anroparens identitet — se Vem som anropar.

Kontexten

Fält Innehåll
functionName Funktionens namn
namespaceName Dess funktionsnamnutrymme
triggerType http, eller timer för en schemalagd körning
user Anspråken i anroparens token; sätts bara på en HTTP-funktion med autentisering påslagen
log(message) Skriver en rad i funktionens logg, med funktionens namn först

Svaret

Returnera ett objekt; alla fält är valfria:

Fält Standard Betydelse
status 200 HTTP-statuskoden
headers inga Svarshuvuden. För att ersätta standardvärdena nedan, använd nyckeln Content-Type stavad exakt så: en nyckel som content-type skickas bredvid standardvärdet i stället för att ersätta det
body tom En sträng skickas som text/plain; allt annat skickas som JSON

Returnerar hanteraren ingenting skickas 200 med en tom kropp. En Buffer skickas också som JSON, så binära svar stöds inte.

Svar från plattformen

De här svaren kommer från körmiljön eller från namnutrymmets proxy, inte från din kod:

Status Kropp När
401 {"error": "…"} Funktionen har autentisering påslagen och token saknas eller godtas inte
404 {"error": "No function found at this path.", "availableRoutes": […]} Ingen HTTP-funktions rutt matchar sökvägen
405 {"error": "Method not allowed", …}, med huvudet Allow Funktionen tar inte emot metoden
500 {"error": "Internal function error"} Hanteraren kastade ett fel; själva felet finns i funktionens logg
503 {"error": "Function '<name>' is stopped.", "status": "stopped"} Funktionen stoppades via proxyns hanteringsgränssnitt — se Hur en förfrågan når en funktion
504 {"error": "Function cold start timeout", …} En vilande funktion startade inte inom 30 sekunder
504 {"error": "Function timed out", "timeoutSeconds": 300} Hanteraren körde längre än sin tidsgräns

Tidsgräns

En hanterare har 300 sekunder på sig. Därefter får anroparen 504, men hanteraren stoppas inte: den fortsätter att köra i bakgrunden. För att korta gränsen, sätt miljövariabeln STACKSHIP_TIMEOUT_SECONDS på funktionen. Proxyn ger upp ett anrop när ingenting har gått mellan den och funktionen på 310 sekunder. Körmiljön skickar svaret först när hanteraren returnerar, så en gräns över ungefär 310 sekunder har ingen effekt.

Miljö

En funktion får namnutrymmets och sina egna miljövariabler, och dessa från plattformen:

Variabel Värde
PORT 8080
STACKSHIP_FUNCTION_NAME Funktionens namn
STACKSHIP_FUNCTION_NAMESPACE Dess funktionsnamnutrymme
STACKSHIP_TRIGGER_TYPE http eller timer
STACKSHIP_ENTRYPOINT handler.js
STSH_<NAME> En per hemlighetsreferens — se Läs värdena i din kod
STACKSHIP_IDENTITY_RESOURCE_UID, STACKSHIP_IDENTITY_TOKEN_ENDPOINT, STACKSHIP_IDENTITY_POD_TOKEN_PATH Namnutrymmets managed identity — se Använd en managed identity i kod

Timerkörningar

En timerfunktion anropas med en POST till / och en JSON-kropp som beskriver körningen; ctx.triggerType är timer. Se Vad en körning tar emot.