Introduction

Benzene

benzene

Benzene is a fast and minimal JavaScript GraphQL Server. In Chemistry, it is a building block chemical. In JavaScript, it is the building block for your next API.

Overview

import express from "express";
import { Benzene, makeHandler } from "@benzene/http";
 
const app = express();
 
const GQL = new Benzene();
 
const graphqlHTTP = makeHandler(GQL);
 
app.use("/graphql", async (req, res) => {
  const result = await graphqlHTTP({
    method: req.method,
    query: req.query,
    body: req.body,
    headers: req.headers,
  });
  res.header(result.headers);
  res.status(result.status).send(result.payload);
});
 
app.listen(4000);

In this example, we create a GraphQL handler graphqlHTTP using a Benzene instance. The instance will also be used in other libraries like @benzene/ws, allowing us to unify pipelines like error formatting in one place.

graphqlHTTP accepts a generic request object containing method, query, body, and headers and returns a generic response object containing status, headers, and payload. This allows it to work with any frameworks (or even runtimes): Node.js, Deno, Cloudflare Worker, etc.

As we can see, graphqlHTTP does nothing but executing the GraphQL request as it is, giving us full control in aspects like CORS or body parsing.