NodeJS API
Written By: Avinash Malhotra
Updated on
RESTful API
NodeJS is the most suitable for constructing RESTful APIs.
Representational state transfer (REST) is a Architectural style used to build a Web Service or RESTful API. A REST API can response json, html or xml based on http request.
HTTP methods like, GET, POST, PUT, PATCH, DELETE etc can be used with Rest API.
Rest API use stateless protocol for faster transfer, reusability, and reliability in long operations.
REST API can be used in same application or other application on web.
Rest API in NodeJS
Lets create a REST API to transfer Array Data based on http GET method. To send data back to web browser, use return keyword followed by the data in JSON Format.
/* app.js*/
const express=require('express');
const app=express();
const data=["sun","mon","tues","wed","thurs","fri","sat"];
app.get('/api',(req,res)=>{
return res.send(data);
});
app.listen(3000,()=>{
console.log(`App running`);
});
Run API
["sun","mon","tues","wed","thurs","fri","sat"]
AJAX or Fetch Based API
The above api will respond within same app. If we call the api using another ip or domain, we we get an error or CORS policy, i.e
Learn more about JavaScript AJAX or Fetch API.
Access to XMLHttpRequest at 'http://127.0.0.1:3000/api' from origin 'http://127.0.0.1:51619' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Enable CORS Policies in Node
To allow cross origin, we have to set headers for Access-Control-Allow-Origin. The possible value are wildcard ( * ), origin or null (not recommended).
Access-Control-Allow-Origin with * value is wildcard. This will allow request from any origin.
Access-Control-Allow-Origin with origin value specific for domain only. Exp techaltum.com . This will allow request from only techaltum.com domain.
Node JS Code
/*app.js*/
const express=require('express');
const app=express();
const data=["sun","mon","tues","wed","thurs","fri","sat"];
app.get('/api',(req,res)=>{
// enable CORS policies
res.header('Access-Control-Allow-Origin',"*");
return res.send(data);
});
app.listen(3000,()=>{
console.log(`App running`);
});
Frontend Code using AJAX
/*index.html*/
<h1>AJAX based API</h1>
<p></p>
<script>
let xhr=new XMLHttpRequest();
xhr.open("get","/api");
xhr.send();
xhr.addEventListener('load',function(){
if(this.readyState==4 && this.status==200){
document.querySelector("p").innerHTML=this.response;
}
else if(this.readyState==4 && this.status==404){
document.querySelector("p").innerHTML="Page Not Found";
}
else{
document.querySelector("p").innerHTML="Unknown Error";
}
});
</script>
Frontend Code using Fetch API
fetch('/api').then(i=>i.json()).then(i=>console.log(i));
Run API
["sun","mon","tues","wed","thurs","fri","sat"]
Now open index.html
in web browser to check api response.
Send and receive data through AJAX
AJAX can also send data to api through send method. In this example, we will build a Rest API to use two way data binding .
Server Side code
/*app.js*/
const express=require("express");
let app=express();
const bodyParser=require('body-parser');
app.use(bodyParser.text());
app.post('/search',(req,res)=>{
let let=req.body; // receive data through ajax
res.header('Access-Control-Allow-Origin',"*");
return res.send(data);
});
app.listen(3000);
Client side Using Fetch API
/*index.html*/
<h1>Fetch API</h1>
<input type="search"> <span></span>
<script>
let data=document.querySelector("input");
data.addEventListener("input",function(){
fetch("/search",{method:"POST",body:JSON.stringify({"name":this.value})}}).then(i=>i.json()).fetch(i=>{
document.querySelector("span").innerHTML=i;
});
});
</script>
Client side using AJAX
/*index.html*/
<h1>Ajax based API</h1>
<input type="search">
<span></span>
<script>
let input=document.querySelector("input");
input.addEventListener("input",function(){
let xhr=new XMLHttpRequest();
xhr.open("post","/search");
xhr.send("name:"+ this.value);
xhr.addEventListener('readystatechange',function(){
if( this.readyState<=3){
document.querySelector("span").innerHTML="loading data";
}
else if(this.readyState==4 && this.status==200){
let data=this.response;
data=JSON.parse(data);
document.querySelector("span").innerHTML=data;
}
else{
document.querySelector("span").innerHTML="Error Found";
}
});
});
</script>