Skip to content
This repository has been archived by the owner on Sep 25, 2024. It is now read-only.

Directus extension to quickly expose request's rawBody to custom endpoints.

License

Notifications You must be signed in to change notification settings

significa/directus-extension-raw-body

Repository files navigation

Directus raw body extension

Simple Directus extension that sets the serialized request body in the express request object.

Installation / Configuration guide

In your Directus project directory run:

npm install @significa/directus-extension-raw-body

Create an environment variable RAW_BODY_ENDPOINT_PATTERN with a Regex Expression matching the endpoints/routes where rawBody will be added to the request object.

Examples:

# Matches all endpoints for a specific extension
RAW_BODY_ENDPOINT_PATTERN='^\/sample-extension\/.*$'

# Matches all endpoints (avoid: you should only set rawBody for custom endpoints)
RAW_BODY_ENDPOINT_PATTERN='^.*$'

# Matches two routes /hello-world and /sample/path
RAW_BODY_ENDPOINT_PATTERN='^(\/hello-world|\/sample\/path)$'

# Matches routes with variable input in path. Ex:
#  - /sample/cats/fifi
#  - /sample/cats/bob1
#  - /sample/aaaa/info
#  - /sample/bbbb/info
RAW_BODY_ENDPOINT_PATTERN='^(\/sample\/cats\/\D+|\/sample\/[a-z]+\/info)$'

Restart Directus for the changes to take effect.

Usage

Create a directus endpoint extension:

  • JS

    export default (router, _) => {
      router.post(
        '/sample',
        async (req, res, _next) => {
        console.log('Raw body:', req.rawBody)
    
         return res.json({
           status: 'OK',
           rawBody: req.rawBody,
         })
      }
    )
  • TS

    import { NextFunction, Request, Response, Router, } from 'express'
    import { ApiExtensionContext } from '@directus/shared/types'
    import { RequestWithRawBody } from "@significa/directus-extension-raw-body";
    
    export default (router, extensionContext: ApiExtensionContext) => {
      router.post(
        '/sample',
        async (req: RequestWithRawBody, res: Response, _next: NextFunction) => {
          console.log('Raw body:', req.rawBody)
    
          return res.json({
            status: 'OK',
            rawBody: req.rawBody,
          })
        }
      )
    })