Playing with Cloudflare Workers

Antal (Tony) Orcsik
3 min readSep 21, 2019

--

I have a small Chrome extension I created for myself, that shows the daily Garfield comic strip every time I open a new tab. I’ll tell you another time how that works, but today…

I noticed that the strips are not loading. Turned out the page where I was loading them from was not updated for the past few days, so I had to search for another source. I found one really fast, but there was a problem.

My original source used a very convenient URL for the images:

https://domain.com/path/yyyy-mm-dd.gif

Unfortunately the new source was a little less convenient:

https://cdn-domain.com/path/hashhashhashhashhashhash

Yeah… hash. But! The pages containing these URLs were date based, so now I had a new problem, how to turn a date, into a URL that is available on a page that is identifiable by that date? I need a… Transformation!

Sailor Moon Transformation by Tenor

How do I a do that? Set up a server somewhere… bah no, too old, too complicated. Then set up a virtual machine… no, IaaS is still too complicated. Ok, then, just deploy my code with dependencies to some environment… no, no, no, PaaS is still too complicated. I just want my few lines of code somewhere, to do my stuff, like… FaaS!!!

“Haaaa-le-lu-jah”

That’s it, Function as a Service! I recently noticed (was bombarded like constantly in newsletters with) Cloudflare Workers. The free tier provides up to 30 workers and 100,000 requests per day on a domain ending with workers.dev. Ok, let’s take this one for a ride.

After signing up, I had to choose a worker subdomain, something.workers.dev. Think this through, you won’t be able to change this later. After that my first worker was created with some random-name-12345, and I landed in the editor.

Oh, the editor, it’s not just some monospace text area, no, it has syntax highlighting and autocomplete, preview panel, a proper console, with proper errors and logging. I used JavaScript, but it is possible to develop locally with CLI and WebAssembly too.

It took me no more than an hour to figure out what I want and write my 8 lines of code, that transforms the date parameter in the query string into the URL, load the page, regex match the image URL and make a redirection. So now if I call:

https://random-name-12345.something.workers.dev/garfield?date=yyyy-mm-dd

it is immediately redirected to that hashhashhash URL what I mentioned in the beginning.

Just what I wanted.

Glitter toss by GIPHY

--

--