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);
