Category: Nodejs API

Ubuntu Apache add reverse proxy to avoid port number visibility | NodeJS

When we create APIs using nodejs we often enable them to run on particular port number. It is all fine until we move into production environment where we don’t want our port number to visible to our clients while we are making the server request calls using the APIs.

So a solution would be to mask our port number and let apache handle the request and redirect the request to that server internally without revealing the port number. For this we need to edit the apache configuration like following.

Before editing run the below command

sudo a2enmod proxy_http

Open the file /etc/apache2/sites-enabled/000-default.conf using any editor and add the following lines under or above the directory tag. Note that if you are using SSL for your site i.e https enabled then you have to edit the file /etc/apache2/sites-enabled/000-default-le-ssl.conf to make it work properly for https enabled sites.

<Location /query-api-0.3.1>
ProxyPass http://localhost:3099/query-api-0.3.1
ProxyPassReverse http://localhost:3099/query-api-0.3.1
Order allow,deny
Allow from all
</Location>

Reverse Proxy exmaple in apache

Then save the file and restart apache and try to run the API request without the port number.

Develop a POST and GET request to add and get data from a file in nodejs

So far, we’ve learnt developing nodejs API with GET and POST request in json format. Today, let’s raise our learning bar and learn saving or writing the json data to a file.

Since, nodejs has huge repository of node modules, it makes our life pretty easy to do almost anything just by importing the respective module.

For instance, in this post, we are going to save the json data to a file for which we need a file stream library that enables us to read and write the data. With nodejs, it is just simple to accomplish this. All you need to do is, install the ‘fs’ module using npm(Node Package Manager) using following command in terminal:

npm install fs
Similarly, body parser is used to extract the entire body portion of an incoming request stream which is exposed on req.body. You may install it using following command:
npm install body-parser

Let’s first add the user data which includes the user name, profession and password. Since, we require the user’s input here, let’s use POST request to send these parameters.

Here, I am saving the data to a file named users.json

server.js

var express = require('express');

var app = express();

var fs = require("fs");

var bodyParser = require('body-parser');

app.use(bodyParser.json({limit: '5mb'}));//set the limit of maximum request body size

app.use( bodyParser.json() );       // to support JSON-encoded bodies

app.use(bodyParser.urlencoded({     // to support URL-encoded bodies

        extended: true,

        limit: '5mb'

}));

   

//saving the user to file

app.post('/addUser', function (req, res) {

    // First read the parameters sent through body.

    var name = req.body.name;

    var password = req.body.password;

    var profession = req.body.profession;

//creating a JSON object with the received parameters.

    var user = {

        "user1" : {

            "name" : name,

            "password" : password,

            "profession" : profession,

            "id": 1

        }

    }

user = JSON.stringify(user);

fs.writeFile('users.json', user);

        console.log("added");

res.json({'message' : 'User added', 'details' : JSON.parse(user) });

})     


//To list the saved users, here's a GET request


app.get('/listUser', function (req, res) {

    // First read existing users.

    fs.readFile( __dirname + "/" + "users.json", 'utf8', function (err, data) {

        data = JSON.parse( data );

        console.log( data );

        res.json(data);

    });

})

// set a port for the server to listen

var server = app.listen(8081, function () {

    var port = server.address().port

    console.log("Example app listening at http://localhost:%s", port)


})

Now let’s run the server to save the user data:

node server.js

Example app listening at http://localhost:8081

To insert the data, send a POST request, you may send the data through form-data or use third party REST client apps like REST client, Http Request or Post Master.

I have used a HTML form to add the user

Here’s the HTML code :

<html>

<title>Add user</title>

<body>

<form  action="http://localhost:8081/addUser" method="post">

  <input value = "name" type="name" name="name" />

  <input value = "profession" type="profession" name="profession" />

  <input value = "password" type="password" name="password" />

  <input type="submit" value="Add"  name="submit" />

  <input type="reset" value="Clear"/>

</form>

</body>

</html>

Output


Here the data is inserted to users.json file now. To fetch the data from file, we use GET request.

Enter the url “http://localhost:8081/listUser” in your browser and it lists the users in the file.

That’s it! Hope this was of help. Happy coding!