5. Node.js why
● Non Blocking I/O
● V8 Javascript Engine
● Single Thread with Event Loop
● 40,025 modules
● Windows, Linux, Mac
● 1 Language for Frontend and Backend
● Active community
6. Node.js for
● Web application
● Websocket server
● Ad server
● Proxy server
● Streaming server
● Fast file upload client
● Any Real-time data apps
● Anything with high I/O
11. Blocking
● Read data from file
● Show data
● Do other tasks
var data = fs.readFileSync( “test.txt” );
console.log( data );
console.log( “Do other tasks” );
http://nodejs.org/api/fs.html
12. Non-Blocking
● Read data from file
○ When read data completed, show data
● Do other tasks
fs.readFile( “test.txt”, function( err, data ) {
console.log(data);
});
console.log(“Do other tasks”);
Callback
13. Callback syntax
fs.readFile( “test.txt”, function( err, data ) {
console.log(data);
});
fs.readFile( “test.txt”, callback )
var callback = function( err, data ) {
console.log(data);
}
As same as
14. Blocking vs Non-Blocking
var callback = function(err, data) {
console.log(data);
}
fs.readFile("test.txt", callback);
fs.readFile("test2.txt", callback);
24. Handle Event
var http = require('http');
var server = http.createServer();
server.on('request', function(req, res){
res.write('Got requestn');
res.end();
});
server.listen(1337, ‘127.0.0.1’);
http://nodejs.org/api/http.html
25. Demo :: Echo server
var server = http.createServer( function(req, res) {
res.writeHead(200);
req.on('data', function(data) {
res.write(data);
});
req.on('end', function(){
res.end();
});
});
26. Demo :: Echo server
$curl -d "somkiat" http://localhost:1337
27. Demo :: Echo server
var server = http.createServer( function(req, res) {
res.writeHead(200);
req.on('data', function(data) {
res.write(data);
});
req.on('end', function(){
res.end();
});
});
Pipe data from
request to response
28. Demo :: Echo server + Pipe
var server = http.createServer( function(req, res) {
res.writeHead(200);
req.pipe(res);
});
29. Demo :: Upload file
http.createServer(function(req, res) {
var newFile = fs.createWriteStream("uploaded.txt");
req.pipe(newFile);
req.on('end', function() {
res.end('uploaded!');
});
}).listen(1337);
Create file on server
and pipe data to file
30. Demo :: Upload file
http.createServer(function(req, res) {
var newFile = fs.createWriteStream("uploaded.txt");
req.pipe(newFile);
req.on('end', function() {
res.end('uploaded!');
});
}).listen(1337);
Handle end event on
request
43. Develop REST API
● REST = REpresentational State Transfer
● Not new technology
● Architectural style for client-server
http://en.wikipedia.org/wiki/Representational_state_transfer
44. Goals of REST
● General interface
● Scalability of component interface
● Reduce latency
● Encapsulate legacy system
54. REST API
Method URL Action
GET / Get all person
GET /person/3 Get person by id=3
POST /person Add new person
PUT /person Update person by id
DELETE /person/3 Delete person by id=3
55. Demo :: REST API
var express = require('express');
var service_person = require('./service_person')
var app = express();
app.get('/', service_person.all);
app.get('/person/:id', service_person.one);
app.post('/person', service_person.insert);
app.put('/person', service_person.update);
app.get('/person/:id', service_person.delete);
app.listen(process.env.PORT || 1337);
56. Working with MySQL
● RDBMS
● Module => see in npmjs.org ( a lot !!!! )
○ "mysql": "2.0.0-alpha9"
58. Demo :: Connect to MySQL
var mysql = require('mysql');
var connection = mysql.createConnection(
{
host: <db server>,
user: <username>,
password: <password>,
database: <database name>
}
);
59. Demo :: Retrieve all data
connection.query('select * from person',
function(err, rows, fields) {
res.contentType('application/json');
res.write(JSON.stringify(rows));
res.end();
}
);
60. Demo :: Retrieve data with criteria
var sql = 'select * from person where id=?';
connection.query( sql, [id],
function(err, rows, fields) {
res.contentType('application/json');
res.write(JSON.stringify(rows));
res.end();
}
);
61. Demo :: Create new data
var sql = 'insert into person (name, gender)
values (?, ?)
';
connection.query( sql, [name, gender],
function(err, rows, fields) {
res.json(true);
}
);
62. Working with MongoDB
● NoSQL
● Document-oriented stoarage
● Keep data in BSON format
● http://www.mongodb.org/
● Module => see in npmjs.org ( a lot !!!! )
○ "redis": "0.8.4"
http://en.wikipedia.org/wiki/BSON
64. Demo :: Connect to MongoDB
var mongo = require('mongodb');
var Server = mongo.Server,
var server = new Server(
'localhost',
27017,
{auto_reconnect: true}
);
db = new Db('persons', server);