Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/rajtatata/cloudflare-worker-rest-api
A cloudflare worker module which helps building REST Api quickly and easily, similar to express framework.
https://github.com/rajtatata/cloudflare-worker-rest-api
cloudflare express expressjs workers
Last synced: 2 months ago
JSON representation
A cloudflare worker module which helps building REST Api quickly and easily, similar to express framework.
- Host: GitHub
- URL: https://github.com/rajtatata/cloudflare-worker-rest-api
- Owner: rajtatata
- Created: 2020-01-21T13:23:58.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2021-04-29T18:22:02.000Z (over 3 years ago)
- Last Synced: 2024-10-14T09:29:56.335Z (2 months ago)
- Topics: cloudflare, express, expressjs, workers
- Language: JavaScript
- Size: 4.88 KB
- Stars: 34
- Watchers: 2
- Forks: 6
- Open Issues: 0
-
Metadata Files:
- Readme: Readme.md
Awesome Lists containing this project
README
# Cloudflare Worker Rest Api
This library helps build serverless rest api with cloudflare workers
## Description
The idea behind this package was to create a library that would be as close to express framework as possible, and that would make creating Rest Apis with Workers quick and easy.
### Installing
Begin by installing the package with npm.
```
npm install cloudflare-worker-rest-api --save
```### Example App
For a fully working example check out this [project](https://github.com/rajtatata/cloudflare-worker-example-rest-api)
## How to use
Import the package and initialize your app.
```js
const restCfWorker = require("cloudflare-worker-rest-api");
const app = new restCfWorker();// ....
addEventListener("fetch", (event) => {
event.respondWith(app.handleRequest(event.request));
});
```In order for cloudflare to use your app, we need to call `app.handleRequest` on the fetch event listener.
### Rest API
The supported methods are POST, GET, DELETE, PATCH, PUT and ANY.
```js
// supports middlewares
app.use((req, res) => {
// do some authenticate process
req.isAuthenticated = true;
});app.get("/path-here", (req, res) => {
// access query
const { filter, page } = req.query();return res.send({ status: 1, message: "Hello stranger!" });
});// Three parameters for req.send method
// First one is Response Data
// Second one is Headers, by default it is set to {'content-type': 'application/json'}
// Third one is Status Code, by default it is set to 200
app.get("/path-here", async (req, res) => {
// access header
const contentType = await req.header("content-type");
if (contentType === "application/json") {
return res.send({ status: 1, message: "File Created!" }, 201);
}return res.send(
"This is a string response",
{ "content-type": "text/plain" },
200
);
});app.get("/path-here", async (req, res) => {
// access header
const contentType = await req.header("content-type");
if (contentType === "application/json") {
return res.send({ status: 1, message: "This is a JSON response!" });
}return res.send("This is a string response", {
"content-type": "text/plain",
});
});app.post("/path-here", async (req, res) => {
// access body
const { username } = await req.body();if (!req.isAuthenticated) {
// supports status code
return res.send(
// undefined to send default headers
{ status: 1, message: "Bro, you not supposed to be here!" },
undefined,
401
);
}
return res.send({
status: 1,
message: "Hello stranger, why are you still here!",
});
});// supports path params
app.delete("/item/:itemId", (req, res) => {
const { itemId } = req.params;return res.send({ status: 1, message: `Oh no, you deleted item ${itemId}` });
});
```### Routing
The package also supports routers, if you want to divide your code in multiple files.
```js
// ./routers/auth.js
const restCfWorker = require("cloudflare-worker-rest-api");const router = new restCfWorker();
router.post("/login", (req, res) => {
return res.send({ status: 1, message: "Successfully logged in!" });
});// export the router
module.exports = router;
```Then you can call your router file in your index file
```js
const restCfWorker = require("cloudflare-worker-rest-api");
const authRouter = require("./routers/auth.js");const app = new restCfWorker();
// use router
app.use("/auth", authRouter);addEventListener("fetch", (event) => {
event.respondWith(app.handleRequest(event.request));
});
```The login route now would be `POST /auth/login`