4. The New Microsoft
• Open
• Flexible
• Competitive
You can run a Node.js web service on a Ubuntu (Linux) VM
on Windows Azure that uses Redis for caching, MongoDB
for sessions, and an SQL Azure database for most models.
Oh, and you can integrate it with a Windows 8 app.
5. What’s Node.js?
• JavaScript on the server on top of Google V8
• Hundreds of modules, vibrant ecosystem
– HTTP/HTTPS, TCP/UDP servers
– File system access, child processes
– DB bindings for just about anything
– MVC framework (Express)
– Everything is open source (mostly on Github)
6. What’s The Difference Between These
Two JavaScript Functions?
function f() { function g() {
return return {
{
ok: false ok: true
}; };
} }
Credit: Douglas Crockford, JavaScript Guru
7. Why Node.js?
• It’s The Hip Thing To Do™
• Makes adaptation easier for JavaScript front-
end developers
• Rapid development, POCs
• Easy to work concurrently without perils of
multithreading and parallelism
• Tiny footprint compared to most server-side
frameworks
8. I hate JavaScript. Why am I
From 0 to 100 this?!?!
doing in 60 Seconds
• Hello, World Node.js web server
var http = require(‘http’);
http.createServer(function (req, res) {
res.writeHead(200, {‘Content-Type’: ‘text/plain’});
res.end(‘Hello, World!n’);
}).listen(8080);
9. Event-Driven Architecture
• Node uses a single event thread by default
• All I/O is asynchronous
node process
Event Queue
callback I/O Completions
Event callback
Thread
callback
10. Asynchronous Everywhere
• Almost no blocking APIs
– “Scaling Node.js for 100K concurrent requests”
– Suffers from nested async callbacks peril
http.createServer(function (req, res) {
var path = url.parse(request.url).pathname;
AllowedPath.find({ name: path }, function (e1, p) {
if (e1) ...
fs.readFile(p.full_path, function (e2, contents) {
if (e2) ...
res.end(contents);
});
});
});
11. What About Azure?
Web Sites
• Shared/reserved, free tier
• Your front-end on Azure
PaaS
• Cloud service
• Web role, Worker role
IaaS
• Bring your own VM
• Windows, multiple Linux flavors
12. Node.js, Meet Azure Web Sites
• Node.js Azure Web Site
– Put your main server code in app.js
– Deploy using Git or FTP
var port = process.env.port || 8080;
var http = require(‘http’);
http.createServer(function (req, res) {
res.writeHead(200, {‘Content-Type’: ‘text/plain’});
res.end(‘Hello, World!n’);
}).listen(port);
13. Express Fundamentals
• Powerful middleware for Node
– Serves static files, renders views with templates,
parses POSTs, provides sessions and cookies,
supports authentication…
var app = express.createServer();
app.get(‘/hello’, function (req, res) {
res.sendfile(‘hello.htm’);
});
app.post(‘/echo’, function (req, res) {
res.end(‘You said: ‘ + req.body.message);
});
14. Data Store for POC Purposes
• The nstore module stores data in a flat file and
maintains an in-memory index
• Great for POC purposes
var messages = nstore.new(‘messages.db’, ...);
messages.save(msg.id, msg, function (err) ...);
messages.all(function (err, results) { ... });
messages.find({ user: ‘Sasha’ }, ...);
16. Datastore Flexibility
• To minimize Azure Web Sites dependencies,
can use local files (nstore module)
• Even in an on-premise application, can use
Azure Table Storage
• On the VM, can use practically any DB
• With either, can use SQL Azure
17. Using Azure Table Storage
var azure = require(‘azure’);
var ts = azure.createTableService(account, key);
ts.createTableIfNotExists(‘messages’, ...);
var msg = {
PartitionKey: ‘partition’,
RowKey: uuid.v1(),
...
};
ts.insertEntity(‘messages’, msg, function(err) ...);
19. Using SQL Azure
• Experimental node-sqlserver module;
requires SQL Server Native Client, Windows-
only, currently supports Node 0.6.x only
var sql = require(‘node-sqlserver’);
sql.query(conn_str, ‘SELECT * FROM Messages’,
function (err, results) {
if (!err) ...
}
);
sql.queryRaw(conn_str, ‘INSERT INTO Messages ...’);
21. Bonus: Windows Azure Mobile
Services
• Don’t bother writing HTTP requests from your
Windows 8 app
• Create a Windows Azure Mobile Service
var table = MobileService.GetTable<Message>();
var messages = table.Where(
m => m.User == ‚Sasha‛).ToList();
table.InsertAsync(new Message { ... });
22. Node.js, Meet Azure VM
• Azure VMs give you full flexibility – install
whatever you want
– Pick from Windows or multiple Linux distros
• We’ll use Mongoose (MongoDB ORM)
var db = mongoose.createConnection(...);
var Message = db.model(‘Message’, taskSchema);
Message.find(function (err, results) { ... });
24. WebMatrix vs. Cloud9
WebMatrix (Windows) Cloud9
• Free IDE for easy Web Site • Web-based IDE that
development, including supports deployment to
with Node.js Azure Websites
http://www.microsoft.com/we http://c9.io
b/webmatrix/
28. Learn More
• Node.js download and documentation
• Node.js on Azure home (bunch of tutorials)
• Express
• Mongoose
• node-sqlserver
Notas del editor
Deploy the bbs-ws application to Azure Web Sites.It uses nstore for persistence.
Use Table Storage from aNode.js on-premise application (could as well be a web site!). This is also applicable for Windows 8 client (but not Node.js).This is the bbs-ts demo.Also show the Azure Web Storage Explorer (http://storageexplorer.cloudapp.net).
Use an SQL Azure database and integrate it (through connection string) in a Node application, using node-sqlserver.This is the bbs-sql demo.
Use Mongoose on the server to integrate with MongoDB. Deploy the bbs-vm code, run it on the Ubuntu VM, show it.If there’s time, also open the ./bin/mongo CLI prompt to show the database contents.
Create a new website, click WebMatrix in the bottom drawer. WebMatrix downloads and opens, you can create a new site and then publish it. All the security details are remembered by the tool.