Node Basic Programming

Contents

Basics

var http = require('http');

http.createServer(function(req, res) {
	res.setHeader('Conent-Type', 'text/plain');
	res.end('Hello World!\n');
}).listen(1337, '127.0.0.1');

console.log('Server running at http://127.0.0.1:1337');

Just, output Hello World!
You can access http://localhost:1337

HTTP Server

http.createServer(method).listen(port, address);

Address is ip or domain style
ex)
listen(80, ‘127.0.0.1’); // Web Server

Log

Log console

console.log('Test');

Set Header Value

setHeader : Header key, value

http.ServerResponse.setHeader(key, value);

createServer

Important 2 arguments
req : Request info http.ClientRequest
res : Response info http.ServerResponse


HTML Output

http.createServer(function(req, res) {
	res.setHeader('Content-Type', 'text/html');
	res.write('<html>\n');
	res.write('<head><title>Hello</title></head>\n');
	res.write('<body>\n');
	res.write('<h1>Hello</h1>\n');
	res.write('<p>this is test</p>');
	res.write('</body></html>\n');
	res.end();
}).listen(1337, '127.0.0.1');

More Simple Style

var http = require('http');
var server = http.createServer(); 
server.on('request', doRequest); server.listen(1234);

function doRequest(req, res) { 
	res.setHeader('Content-Type','text/plain'); 
	res.write('Hello!');
	res.end();
}

Image Streaming

var http = require('http');
var fs = require('fs');
http.createServer(function(req, res) {

   res.writeHead(200, {'Content-Type': 'image/png'});
   fs.createReadStream('./im-yoona.png').pipe(res);
}).listen(3000);
console.log('Server running at http://localhost:3000');

Handle multiple pages

Node doesn’t have basic Web server feature.
If you want to handle pages, do by yourself.

Idea

Use url module and url.parse method

var url = require('url');

function doRequest(req, res) {
	var path = url.parse(req.url);   // req.url URL
        // Path is object
        switch(path.pathname) {   // Oh we can us switch
        }
}

And handle by switch (switch can recognize string)

var path = url.parse(req.url);
switch(path.pathname) {
   case '/':
      fs.readFile('index.html', 'UTF-8', doRead);
      function doRead(err, data) {
        res.setHeader('Content-Type', 'text/html');
        res.write(data);
        res.end();
      }
      break;
   case '/hello':
      res.setHeader('Content-Type', 'text/html');
      res.end('Hello!');
      break;
   default:
      res.setHeader('Content-Type', 'text/html');
      res.end('ERROR! - NO PAGE-');
      break;
}

Form

HTML

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>HTML</title>
	</head>
	<body>
		<h1>Index Page</h1>
		<p>@@@@@</p>
		<form method="post" action="/form">
			<input type="text" name="input1">
			<input type="submit">
		</form>
	</body>
</html>

QueryString

var qs = require('querystring');

if (req.method == "POST") {
   // POST
}
else {
  // GET
}

Sample

var http = require('http');
var fs = require('fs');
var url = require('url');
var qs = require('querystring');

var server = http.createServer();
server.on('request', doRequest);
server.listen(1337);

function doRequest(req, res) {
	
	var path = url.parse(req.url);
	switch(path.pathname) {
	case '/':
		fs.readFile('index.html', 'UTF-8', doRead);
		
		function doRead(err, data) {
			res.setHeader('Content-Type', 'text/html');
			res.write(data);
			res.end();
		}
		break;
	case '/form':
		if (req.method == "POST") {
			var reqBody = '';
			req.on('data', function(data){
				reqBody += data;
			});
			req.on('end', function(){
				var form = qs.parse(reqBody);
				var input1 = form.input1;
				fs.readFile('index.html', 'UTF-8', function(err, data){
					var result = data.replace(/@@@@@/, "You wrote " + input1 + ".");
					res.setHeader('Content-Type', 'text/html');
					res.write(result);
					res.end();
				});
			});
		}
		break;
	default:
		res.setHeader('Content-Type', 'text/html');
		res.end('ERROR! - NO PAGE-');
		break;
	}
}

console.log('Server running at http://127.0.0.1:1337/');

data : Happens everytime we received data
end : Finish data receive

Process handle

var reqBody = '';
req.on('data', function(data) {
   reqBody += data;
});

Parse Query String

var form = qs.parse(reqBody);