Writing Backend Code
Overview​
Backend function code executes in a serverless environment associated with your 8th Wall account.
All backend functions must export a top level async method called handler
, which is the entry
point into the backend function.
Example entry file code:
const handler = async (event: any) => {
// Custom backend code goes here
return {
body: JSON.stringify({
myResponse,
}),
}
}
export {
handler,
}
Client Method​
When you create a backend function, a client method is automatically created for you. This client
method is a wrapper around fetch
, meaning you can pass the same arguments to this function as you
would with a normal fetch
call. See Fetch API
for more details.
This client method is how you send requests from module client code to the backend function.
Function Event Parameters​
The handler method is invoked with an event
object each time the client method is called. event
has the following properties:
Property | Type | Description |
---|---|---|
path | string | The URL path passed to the client method ('/getUser/foo' , '/checkAnswer' , etc). |
body | string | Call JSON.parse(event.body) to get transform the body into an object. |
httpMethod | string | The HTTP method used to call the backend function. One of 'GET' , 'PUT' , 'POST' , 'PATCH' , 'DELETE' . |
queryStringParameters | Record<string, string> | Key/value pairs containg the query string parameters from the request. |
headers | Record<string, string> | Key/value pairs containing request headers. |
Return Object​
All properties are optional.
Property | Type | Description |
---|---|---|
statusCode | number | The status code of the response. Default is 200 . |
headers | Record<string, string> | The headers associated with the response. |
body | string | The JSON.stringify() 'd body object associated with the response. |
Error Handling​
If the backend function throws an uncaught exception, the function will return statusCode: 500
with an error object in the response body.
If you own the module and are in development mode, the error object will contain name
,
message
and stack
:
{error: {name: string, message: string, stack: string}}
Example:
{
"error": {
"name": "TypeError",
"message": "Cannot read properties of undefined (reading 'foo')",
"stack": "TypeError: Cannot read properties of undefined (reading 'foo')\n at call (webpack:///src/index.ts:8:24)\n ...
}
}
For non-development mode, the error object will not contain a name
or stack
property and the
message
will be a generic "Internal Server Error".
Pinning Targets​
Please refer to https://www.8thwall.com/docs/guides/modules/pinning-targets/ for full details on module pinning targets.
When pinning to a Version
, Allowed Updates must be set to None
When pinning to a Commit
, select a specific commit. Latest
is not supported.