Friday 27 October 2017

Developing a POST request in nodejs

Unlike GET request which sends the data through url may not be considered the right option in case of sending a confidential data, POST request is considered the best option as it encrypts the data in the body to send it.

Nodejs is a one of a kind where you can easily create a POST request. Let's learn how to create a POST request.

1. We will create a request to get the user name. Let's name the server file as server.js

server.js

var express = require('express');

var app = express();

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


// Create application/x-www-form-urlencoded parser

var urlencodedParser = bodyParser.urlencoded({ extended: false })


//The / here represents the path to an interface to send the user name from

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

        res.sendFile( __dirname + "/" + "index.html" );

    })


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

    // Prepare output in JSON format

    response = {

        first_name:req.body.first_name,

    last_name:req.body.last_name

    };

    console.log(response);

    res.end(JSON.stringify(response));

})


app.listen('8081');

console.log("server is up and running..");

The express module enables you to create a server while the body parser allows you to parse the body in which the user name is sent. Since we need to encode the body, the urlencoded does the job for us.

The post request uses headers to send the data, you may need different types of headers depending upon your requirement(for instance, multipart-form-data to send files and x-www-form-urlencoded to send form data). For more info about headers, click here

req.body refers to the content of the body. If you'd like to fetch specific contents from the body, you may add it at the end of req.body as in the above code where we're fetching first_name using req.body.first_name.

2. To send a request, we first create an interface where we can send the username from.

index.html


<html>

<body>

<form action = "http://localhost:8081/listUsers" method = "POST">

 First Name: <input type = "text" name = "first_name">&nbsp; <br>

 Last Name: <input type = "text" name = "last_name">

 <input type = "submit" value = "Submit">

</form>

</body> 

3. Running the server

Now that we are ready with server and interface, let's run them.

To run the node server, type the following command(presuming you have nodejs installed or you may install it from here)


node server.js

Output

server is up and running..

4. To send a request using the interface, open http:localhost:8081 in your browser and you will be redirected to webpage where you can input username


4. Click on "Submit", which sends a request to the server and you'll get response that returns the username



If you notice the url in the output, you don't find the user name unlike in GET request you'll find the user name in the url itself. The user name in POST request in embedded in the body which is why it doesn't appear in the url. Thus, POST request is considered to be the best practice while sending confidential data.

Here we are representing them in JSON format. Similarly, we may save it to the file or database which I'll demonstrate in the upcoming posts.

Happy coding! ;)

Wednesday 25 October 2017

Developing a GET request to send username using nodejs

Nodejs is a single threaded server-side platform which has gained it's unique niche due it's asynchronous feature thereby enhancing the speed of execution and efficiency.

The unique feature of nodejs is that you can create request and server for many web applications.

1. Let's start of with creating a basic GET request using nodejs. We will request for a username through GET request which is provided by the user.

a) Developing a GET request on server to  receive and print the username

server.js

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

app.get('/', function (req, res) {
res.sendFile( __dirname + "/" + "index.html" );
})

app.get('/getUsers', function (req, res) {
// Prepare output in JSON format
response = {
first_name : req.query.first_name,
last_name : req.query.last_name
};
console.log(response);
res.end(JSON.stringify(response));
})

app.listen('8081');
console.log("server is up and running..");
Express module helps you create a request and listen function binds the ip to the server.

b) To send a request, we first create an interface where we can input the username.

index.html


<html>
<body>
<form action = "http://localhost:8081/getUsers" method = "GET">
 First Name: <input type = "text" name = "first_name">&nbsp; <br>
 Last Name: <input type = "text" name = "last_name">
 <input type = "submit" value = "Submit">
</form>
</body>

2. Running the server

Now that we are ready with server and interface, let's run them.

To run the node server, type the following command(presuming you have nodejs installed or you may install it from here)


node server.js

Output

server is up and running..

3. To send a request using the interface, open http:localhost:8081 in your browser and you will be redirected to webpage where you can input username




4. Click on "Submit", which sends a request to the server and you'll get response that returns the username.




Here we are just printing the user name sent by the user. Similarly, we may save it to the file or database.

Hope this helped you!

Happy learning!




Saturday 21 October 2017

Developing a basic responsive Telegram bot that echoes your input

Well it's not quite easy for a beginner to develop telegram bot in a short time by exploring the telegram bot API. I'll just brief you the procedure by developing a basic telegram bot and I'm sure this tutorial would help you kick start with developing a telegram bot of your own with in a short time. Once you get familiar with basic bot, you could explore the official telegram bot API for customizing your bot.

Let's get started with developing a basic telegram bot.

1. Firstly, you would need to create or register your bot with Telegram. A Telegram's bot called "BotFather" will help you do this.

Login into telegram either through web or app and search for "BotFather" in search box.



2. Select BotFather and you'll find options to create a new bot in botfather chat.



3.  Click on "/newbot" option and enter your bot's name. I am naming my bot as "echo bot".


 4. Once you are done with creating your bot, you'll be issued a token. Save this token for later use.

5. Now your bot is ready to show up on telegram, you may search your bot using it's user name in search box.




 6. Now that the bot is ready, let's add some life to it. For this, we'll have to develop a server for our bot to help it handle the actions(echo user input in our case). To get our server communicated with this bot, we use the token(in step 3) issued by BotFather.

7. Let's develop a script which upon sending an input from our bot echoes it back to bot. I am using nodejs as server side language, it can also be developed in python. Since, node has pretty good number of modules that would make it easy for developing server-side, I'm using it. Here, I'm using a node module called node-telegram-bot-api which has pre-defined packages required for telegram bot API.

Server code for bot with filename echobot.js:

const http = require('http');

const https = require('https');

var TelegramBot = require('node-telegram-bot-api');

var token = 'XXXX'; //Token issued by BotFather

var bot = new TelegramBot(token, {

    polling: true

});


//getMe() returns the user name of the bot


bot.getMe().then(function(me) {

    console.log('Hi my name is %s!', me.username); //prints on console  when you run the server.

});


//on entering any text, we're converting the character case to lower


bot.onText(/.*/, function(msg, match) {

    var text = msg.text;

    text = text.toLowerCase();


    //remove special characters in the input


    text = text.replace(/[.,\/#!$%\^&\*;:{}=\-_`~()?'"@|\+<>\[\]]/g, "");

    text = text.replace(/\s{2,}/g, " ");


    //just to add AI, on input hi/hello, it prints this message


    var fromId = msg.from.id; // get the id, of who is sending the message

    if (text == "hi" || text == "hello") {

        //  console.log("hi d d gdg d"+msg.text);

        var from = msg.from.first_name; // get the id, of who is sending the message

        var message = "Hi " + from + " Welcome to your eng-hin Bot\n"

        message += "Type any english word and get the respective hindi meaning.";

        bot.sendMessage(fromId, message);

    } else {

        message = text;

        bot.sendMessage(fromId, message); //echoes the message

    }


});

});

8. Now that our server is ready, let's run the server using the following command:


$ node echobot.js



9. Try the echo bot in telegram by sending the messages.



That's it, your bot is ready to talk to you now :) Hope you are aware of customizing your own telegram bot now.

Happy coding ;)