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