Skip to content

Instantly share code, notes, and snippets.

@irace
Last active August 29, 2015 14:00
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save irace/ec0ce0faaadf00ccaddb to your computer and use it in GitHub Desktop.
Save irace/ec0ce0faaadf00ccaddb to your computer and use it in GitHub Desktop.
Node.js for mobile developers

Node.js for mobile developers

Bryan Irace


What is Node.js?

A platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.


Not a web framework or language


Components

  • V8 (Google's JavaScript engine)
  • libuv (platform Independent I/O bindings)
  • Core libraries (networking, modules, REPL, streams, logging)
  • OpenSSL, etc.

What's it good at?

  • I/O
  • Command line tools
  • Not CPU-bound work

Everything is asynchronous


JavaScript


##~70K modules


package.json

{
  "name": "lunchr",
  "version": "1.0.0",
  "dependencies": {
    "express": "3.4.3",
    "request": "2.27.0",
    "underscore": "1.6.0"
  }
}

Importing

var request = require('request');
var _       = require('underscore');
var qs      = require('querystring');
var express = require('express');

Modules


Express

var express = require('express');
var app = express();

app.get('/', function(req, res){
  res.send('Hello, world');
});

app.listen(3000);

Async

async.parallel([
  function (callback) {
    ywa('1519698779', 'BOOKMARK_10135', callback);
  },
  function (callback) {
    play('com.tumblr', callback);
  }
], function (err, results) {
  if (err) {
    callback(err);
  }
  else {
    var ywa_data      = results[0]
      , play_rating   = results[1]

    // TODO
  }
}

Request

request({
  url: 'https://rink.hockeyapp.net/api/2/apps/' + app_id + '/statistics',
  headers: {
    'X-HockeyAppToken': '61c40d6b6fac43d880e97c0bd22b4903'
  }
}, function (err, response, body) {
  if (err) {
    callback(err);
  }
  else {
    var versions = JSON.parse(body)['app_versions'];

    // TODO
  }
}

jQuery

$('tr.stathead').remove();
$('tr').removeAttr('align').removeAttr('class');

$('tr:first').find('td').replaceWith(function () {
    return $('<th></th>')
        .html($(this).contents())
        .attr('data-week', index_of($(this)));
});

Underscore

_.chain([1, 2, 3, 200])
  .filter(function(num) { 
    return num % 2 == 0; 
   })
  .map(function(num) { 
    return num * num 
   })
  .value();

shell.js

require('shelljs/global');

if (!which('git')) {
  echo('Sorry, this script requires git');
  exit(1);
}

// Copy files to release dir
mkdir('-p', 'out/Release');
cp('-R', 'stuff/*', 'out/Release');

// Replace macros in each .js file
cd('lib');
ls('*.js').forEach(function(file) {
  sed('-i', 'BUILD_VERSION', 'v0.1.2', file);
  sed('-i', /.*REMOVE_THIS_LINE.*\n/, '', file);
  sed('-i', /.*REPLACE_LINE_WITH_MACRO.*\n/, cat('macro.js'), file);
});
cd('..');

// Run external tool synchronously
if (exec('git commit -am "Auto-commit"').code !== 0) {
  echo('Error: Git commit failed');
  exit(1);
}

Hosting

  • Easy to install
    • Windows
    • OS X (just a .dmg file)
  • Easy to host
    • Heroku
    • Windows Azure

Debugging

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment