Create a file called server.ts and add the following code
server.ts
Copy
Ask AI
import express, { Request, Response, Application } from 'express';import dotenv from 'dotenv';import { Ratelimit } from '@unkey/ratelimit';//For env Filedotenv.config();const app: Application = express();const port = process.env.PORT || 8000;/**This can be a seperate util for easy configurable ratelimiting acrossmultiple routes.namespace = The route identifier you would like to ratelimitlimit = The amount of requestsduration = amount of time to limit against for example "30s"**/const limiter = new Ratelimit({ namespace: "express-example", limit: 2, duration: "30s", rootKey: process.env.UNKEY_ROOT_KEY});app.get('/', (req: Request, res: Response) => { res.send('Welcome to Express & TypeScript Server');});// This endpoint is protected by Unkeyapp.get('/secret', async (req: Request, res: Response) => { const identifier = req.getUserId() // or ip or anything else you want const ratelimit = await limiter.limit(identifier) if (!ratelimit.success){ res.status(429).send("Please try again later") } return res.status(200).send("ok");})app.listen(port, () => { console.log(`Server is listening at http://localhost:${port}`);});
5
Running the server
Copy
Ask AI
npm run start
6
Try it out
Copy
Ask AI
curl 'http://localhost:8000/secret'
You will need to curl a few times to see the ratelimiting error. Once you do, you, you will need to wait to perform the action again.