Method Override
Enable HTTP verb support (PUT, PATCH, DELETE) for clients that only support GET and POST (like HTML forms or older browsers).
Quick Start
import { Server } from "balda";
const app = new Server({
plugins: {
methodOverride: {
methods: ["POST"],
header: "X-HTTP-Method-Override",
},
},
});
Configuration
Basic Usage
methodOverride({
methods: ["POST"], // Methods that can be overridden
header: "X-HTTP-Method-Override", // Header to read override from
});
Custom Configuration
methodOverride({
methods: ["POST", "GET"],
header: "X-HTTP-Method",
});
Options
| Option | Type | Default | Description |
|---|---|---|---|
methods | string[] | ['POST'] | HTTP methods that can be overridden |
header | string | X-HTTP-Method-Override | Header name to read the override method from |
How It Works
- Checks if request method is in allowed methods (default: POST)
- Reads override method from header
- Validates override method (GET, POST, PUT, PATCH, DELETE)
- Updates
req.methodwith the override value
Use Cases
HTML Forms
HTML forms only support GET and POST. Use this to enable PUT/DELETE:
<form method="POST" action="/users/123">
<input type="hidden" name="_method" value="DELETE" />
<button type="submit">Delete User</button>
</form>
// With body parser that extracts _method field
app.post("/users/:id", (req, res) => {
if (req.method === "DELETE") {
// Handle deletion
}
});
Client Requests
// Client-side
fetch("/api/users/123", {
method: "POST",
headers: {
"X-HTTP-Method-Override": "DELETE",
"Content-Type": "application/json",
},
});
// Server-side - receives as DELETE
app.delete("/api/users/:id", (req, res) => {
// Handles the request
});
Example: Complete Setup
import { Server, methodOverride, json } from "balda";
const app = new Server({
plugins: {
json: {
sizeLimit: "10mb",
},
methodOverride: {
methods: ["POST"],
header: "X-HTTP-Method-Override",
},
},
});
// This route will handle both actual DELETE and overridden POST->DELETE
app.delete("/users/:id", (req, res) => {
res.json({ message: "User deleted" });
});