Setup proxy server with Express

February 20, 2015

The problem:

I am working on a project using BreweryDB. I was trying to load some data from the API, but they don’t support jsonp. There is a CORS issue if I directly fetch data using Angular:

    XMLHttpRequest cannot load [https://api.brewerydb.com/v2/.](https://api.brewerydb.com/v2/.) No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access.

My solution:

I don’t want to expose my API key, so I have to setup an intermediate proxy. The following code illustrates step by step on how to setup a proxy using node/express.

Step 1: Install express and request

    npm install express --save npm install request --save

Step 2: Create server.js

    var express = require('express');
    var request = require('request');
    var app = express();

Step 3: Setup the route (replace API_KEY with your API key)

    app.get('/api', function(req, res){
      request('https://api.brewerydb.com/v2/?key=' + API_KEY, function (error, response, body) {
        if (!error && response.statusCode === 200) {
          console.log(body);
          res.send(body);
        }
       });
    });

Step 4: Setup the port

    app.listen(3000);
    console.log('Server running on port %d', 3000);

Step 5: Start the server (node server.js)

Open your brower at http://localhost:3000/api, you should be able the get the json object and log in your browser console:

    "message":"Request Successful",
    "data":"You have reached the BreweryDB.com API. For access, check out http://www.brewerydb.com/developers",
    "status":"success"

Send me an email if you have any problem ☺


Profile picture

Experience in software development, application architecture, and deploying cloud solutions for enterprise customers. Strong hands-on skills with a Master's degree in Computer Science and business acumen with a master of business administration (MBA) in Finance. Certified in Amazon Web Services (AWS), Google Cloud Platform (GCP), Microsoft Azure, Kubernetes (CKA, CKAD, CKS, KCNA) and Scrum (PSM, PSPO) with experience in building banking products from scratch. Connect on Linkedin

© 2022, @victorleungtw