@cfworker/web
    TypeScript icon, indicating that this package has built-in type declarations

    1.12.1 • Public • Published

    @cfworker/web

    Web framework for Cloudflare Workers and service workers, inspired by Koa and fastify.

    import {
      Application,
      Middleware,
      Router,
      validate,
      normalizePathnameMiddleware
    } from '@cfworker/web';
    
    const router = new Router();
    
    // Add the homepage route.
    router.get('/', ({ res }) => {
      res.body = `
        <h1>@cfworker/web demo</h1>
        <h2 id="example-routes">Example routes</h2>
        <ol aria-labelledby="example-routes">
          <li><a href="/greetings/hello">A valid greeting</a></li>
          <li><a href="/greetings/hell">An invalid greeting</a></li>
          <li><a href="/error">A route with a bug</a></li>
        </ol>
        <img src="favicon.ico" alt="cfworker logo">`;
    });
    
    // Add a greeting route with validation.
    router.get(
      '/greetings/:greeting',
      validate({
        params: {
          required: ['greeting'],
          properties: {
            greeting: {
              minLength: 5,
              maxLength: 10
            }
          }
        }
      }),
      ({ req, res }) => {
        res.body = req.params;
      }
    );
    
    // Add a route to demonstrate exception handling.
    router.get('/error', () => {
      // @ts-ignore - this route has a bug!
      req.this.method.does.not.exist();
    });
    
    // Favicon route for fun :)
    router.get('/favicon.ico', ({ res }) => {
      res.type = 'image/svg+xml';
      res.body = `
          <svg xmlns="http://www.w3.org/2000/svg" baseProfile="full" width="200" height="200">
            <rect width="100%" height="100%" fill="#F38020"/>
            <text font-size="120" font-family="Arial, Helvetica, sans-serif" text-anchor="end" fill="#FFF" x="185" y="185">W</text>
          </svg>`;
    });
    
    // Simple CORS middleware.
    const cors: Middleware = async ({ res }, next) => {
      res.headers.set('access-control-allow-origin', '*');
      await next();
    };
    
    // Compose the application
    new Application()
      .use(normalizePathnameMiddleware)
      .use(cors)
      .use(router.middleware)
      .listen();

    To run this example:

    git clone https://github.com/cfworker/cfworker
    cd cfworker
    npm install
    npm run start-web --workspace=@cfworker/examples
    

    Install

    npm i @cfworker/web

    DownloadsWeekly Downloads

    194

    Version

    1.12.1

    License

    MIT

    Unpacked Size

    51.2 kB

    Total Files

    40

    Last publish

    Collaborators

    • jdanyow