node.js http server and request client
Objective: Write a node http server and client. The server will provide post, get, put and delete services to create, read, update and delete (CRUD) rows in a mysql table students that stores students’ name and grade. The client will make requests to the server for post, get, put and delete operations. Besides the external modules for mysql and request, no other external modules should be used.
Prerequsites: Node js and mysql database should have been installed on your computer. The walk through assumes you are using linix or mac.
1. Create mysql table for the students table.
[code language=”sql”]
CREATE DATEBASE test;
USE test;
CREATE TABLE `students` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`grade` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
);
[/code]
2. Create a folder, 2 js files (server.js and client.js), and install 2 node external modules.
[code language=”javascript”]
mkdir serverapp
cd serverapp
touch server.js
touch client.js
sudo npm install mysql request
[/code]
3. server.js, provide POST, GET, PUT and DELETE services.
[code language=”javascript”]
//Import modules and declare global variables, update the mysql connecion to yours
var http = require(‘http’),
url = require(‘url’),
qs = require(‘querystring’),
mysql = require(‘mysql’),
pool = mysql.createPool({host:’localhost’, user:’your_mysql_username’, password:’your_mysql_password’, database:’test’}),
port = 3333,
postQuery = "INSERT INTO students(name, grade) VALUE (?, ?)",
getQuery = "SELECT * FROM students WHERE id=?",
putQuery = "UPDATE students SET grade=? WHERE id=?",
deleteQuery = "DELETE FROM students WHERE id=?";
//Create the server listening to port 3333, all requests come through this first.
//It parses the data and routes the request to appropriate functions
http.createServer(function (req, res) {
console.log("There is an incoming request…");
var urlParts = url.parse(req.url);
req.urlParts = urlParts,
reqPath = urlParts.pathname;
if (reqPath !== ‘/api/student/’) {
res.writeHead(400, {‘Content-type’:’text/plain’});
res.end("Bad request!");
} else {
parseData(req, res, function() {
switch(req.method) {
case "POST":
postReq(req, res);
break;
case "GET":
getReq(req, res);
break;
case "PUT":
putReq(req, res);
break;
case "DELETE":
deleteReq(req,res);
break;
default:
notFound(req,res);
break;
}
});
};
}).listen(port);
console.log("Server running at http://localhost:" + port);
//Parse the incomning request data
function parseData(req, res, cb) {
var body = ”;
req.on(‘data’, function (data) {
body += data;
if (body.length > 1e6) {
req.connection.destroy();
}
});
req.on(‘end’, function () {
req.body = qs.parse(body);
console.log(req.body);
req.urlParams = qs.parse(req.urlParts.query);
cb(req, res);
});
}
//A simple mysql resonse handler, write the result from myql query to response
function mysqlResponseHandler(err, result, req, res) {
if (err) {
console.log(err);
res.writeHead(400, {‘Content-type’:’text/plain’});
res.end(req.method + " failed!");
} else {
res.writeHead(200, {‘Content-type’:’application/json’});
res.end(JSON.stringify(result));
}
}
//Processing POST request
function postReq(req, res) {
var q = mysql.format(postQuery, [req.body.name, req.body.grade]);
pool.query(q, function (err, result) {
mysqlResponseHandler(err, result, req, res)
});
}
//Processing GET reqest
function getReq(req, res) {
var q = mysql.format(getQuery, [req.urlParams.id]);
pool.query(q, function (err, result) {
mysqlResponseHandler(err, result, req, res);
});
}
//Processing PUT request
function putReq(req, res) {
var q = mysql.format(putQuery, [req.body.grade, req.body.id]);
pool.query(q, function (err, result) {
mysqlResponseHandler(err, result, req, res)
});
}
//Processing DELETE request
function deleteReq(req, res) {
var q = mysql.format(deleteQuery, [req.body.id]);
pool.query(q, function (err, result) {
mysqlResponseHandler(err, result, req, res)
});
}
//not found resonse
function notFound(req, res) {
res.writeHead(404, {‘Content-type’:’text/plain’});
res.end("Resource not found!");
}
[/code]
4. client.js, request POST, GET, PUT and DELETE services.
[code language=”javascript”]
var request = require(‘request’);
//do POST request
function doPOST() {
var postData = {
url: ‘http://localhost:3333/api/student/’,
form: {‘name’: ‘Amy’, ‘grade’: 99}
};
request.post(postData, function (err, res, body) {
console.log(res.body);
});
}
//do GET request, getting the student where the id=1
function doGET() {
request.get(‘http://localhost:3333/api/student/?id=1’, function (err, res, body) {
console.log(res.body);
})
}
//do PUT request, update the student’s score to 90 where the id=1
function doPUT() {
var putData = {
url: ‘http://localhost:3333/api/student/’,
form: {‘id’: 1, ‘grade’: 90}
}
request.put(putData, function (err, res, body) {
console.log(res.body);
})
}
//do DELETE request, delete the student where the id=1
function doDELETE() {
var delData = {
url: ‘http://localhost:3333/api/student/’,
form: {‘id’: 1}
}
request.del(delData, function (err, res, body) {
console.log(res.body);
})
}
doPOST();
doGET();
doPUT();
//doDELETE();
[/code]
5. Start ther server.
[code language=”shell”]
node server.js &
[/code]
6. Run the client to make requests.
[code language=”shell”]
node client.js
[/code]
Search within Codexpedia

Search the entire web
