Simple Directus extension that sets the serialized request body in the express request object.
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.
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, }) } ) })