Roman Liutikov
front-end web dev

is bad for:
is good for:

Node Package Manager
~55k modules available
npm install expressnpm install express -gnpm install express --savenpm install nodemon --save-dev
{ "name": "application-name", "version": "0.0.1", "private": true, "scripts": { "start": "node app.js" }, "dependencies": { "express": "3.4.8", "jade": "*" },"devDependencies: {} }
npm publish <tarball>npm publish <folder>
var http = require('http');http.createServer(function (req, res) {res.writeHead(200, {'Content-Type': 'text/plain'});res.end('Hello World!');}).listen(3000);
node server.js
// require a modulevar server = http || https || net;server.createServer([requestListener]).listen(port, [callback]);
var fs = require('fs');fs.readFile(filename, [options], callback);fs.readFileSync(filename, [options]);fs.writeFile(filename, data, [options], callback);fs.writeFileSync(filename, data, [options]);fs.rmdir(path, callback);fs.unlink(path, callback);fs.readdir(path, callback);
http.createServer(function (req, res) {fs.readFile(__dirname + '/file.txt', function (err, data) {res.end(data);});});
http.createServer(function (req, res) {var stream = fs.createReadStream(__dirname + '/file.txt');stream.pipe(res);});
var cp = require('child_process');cp.spawn(command, [args], [options]);cp.exec(command, [options], callback);cp.execFile(file, [args], [options], [callback]);cp.fork(modulePath, [args], [options]);
child.stdin // Writable streamchild.stdout // Readable streamchild.stderr // Readable stream// Sync, used with 'forked' process onlychild.send(message);child.on('message', callback);
var cluster = require('cluster'),http = require('http'),numCPUs = require('os').cpus().length;if (cluster.isMaster) {for (var i = 0; i < numCPUs; i++) {cluster.fork();}} else {http.createServer(function (req, res) {res.writeHead(200, {'Content-Type': 'text/plain'});res.end('Hello World!');}).listen(3000);}
npm install -g expressexpress appname
var express = require('express'),app = express();app.set('port', process.env.PORT || 3000);app.set('view engine', 'jade');app.set('views', __dirname + '/views');app.use(express.bodyParser());app.use(express.methodOverride());app.use(app.router);app.use(express.static(path.join(__dirname, 'public')));app.listen(app.get('port'));
app.use(function (req, res, next) {// Do something...next(); // Call next middleware});var middleware = function (req, res, next) {// Do something...next(); // Call next middleware};
app.get('/', function (req, res) {res.render('index');});app.get('/user', middleware, function (req, res) {res.render('user'); // Render page for authorized users only});
var AuthError = function (msg) {Error.call(this);Error.captureStackTrace(this, arguments.callee);this.message = msg;this.name = 'AuthError';};AuthError.prototype.__proto__ = Error.prototype;
app.use(function (err, req, res, next) {if (err.name == 'AuthError') {res.send(401, {error: err.message});}});
var middleware = function (req, res, next) {if (req.body.password != 'password') {return next(new AuthError('Unauthorized'));}next();};
Document-Oriented BSON data storage
+ Mongoose ODM
var mongoose = require('mongoose');mongoose.connect('mongodb://localhost/dbname');
var Schema = require('mongoose').Schema;var UserSchema = new Schema({username: {type: String,unique: true,required: true},comments: [{body: String, date: Date}],modified: {type: Date,default: Date.now},role: String});var User = mongoose.model('User', UserSchema);
var user = new User(data);user.save(function (err, user) {});User.find(function (err, users) {});User.find({role: 'Moderator'}, function (err, users) {});User.findOne({username: 'user'}, function (err, user) {});User.findById(id, function (err, user) {user.remove(function (err) {});});
app.post('/books', function (req, res, next) {var book = new Book(req.body);book.save(function (err, book) {if (err) return next(new Error('Server error'));res.send(200, {book: book});});});app.get('/books/:id', function (req, res, next) {Book.findById(req.params.id, function (err, book) {if (err) return next(new Error('Server error'));if (!book) return res.send(404, {error: 'Not found'});res.send(200, {book: book});});});// ...
var io = require('socket.io').listen(80);io.sockets.on('connection', function (socket) {socket.on('my event', function (data) {});socket.emit('another event', data);});
By Roman Liutikov
Introduction to Node.js development. A brief talk about Node's API, frameworks & libs, use cases and prototyping.