Roman Liutikov
front-end web dev
is bad for:
is good for:
Node Package Manager
~55k modules available
npm install express
npm install express -g
npm install express --save
npm 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 module
var 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 stream
child.stdout // Readable stream
child.stderr // Readable stream
// Sync, used with 'forked' process only
child.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 express
express 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.