var parser = document.createElement('a'); | |
parser.href = "http://example.com:3000/pathname/?search=test#hash"; | |
parser.protocol; // => "http:" | |
parser.hostname; // => "example.com" | |
parser.port; // => "3000" | |
parser.pathname; // => "/pathname/" | |
parser.search; // => "?search=test" | |
parser.hash; // => "#hash" | |
parser.host; // => "example.com:3000" |
From Meteor's documentation:
In Meteor, your server code runs in a single thread per request, not in the asynchronous callback style typical of Node. We find the linear execution model a better fit for the typical server code in a Meteor application.
This guide serves as a mini-tour of tools, trix and patterns that can be used to run async code in Meteor.
Sometimes we need to run async code in Meteor.methods
. For this we create a Future
to block until the async code has finished. This pattern can be seen all over Meteor's own codebase:
/* Imagine you want to develop a facebook canvas app. | |
This snippet will do all the auth dance without requiring the user to click on login. | |
But if the user is not logged in facebook, it will ask for the user to login. | |
Tip: Open the browser console to see debug messages. | |
Followed instructions of Facebook: https://developers.facebook.com/docs/howtos/login/getting-started/ | |
It's is possible to improve this code with more error handling. | |
*/ | |
if (Meteor.is_client) { |
( function( window, undefined ) { | |
'use strict'; | |
// helper function | |
function capitalize( str ) { | |
return str.charAt(0).toUpperCase() + str.slice(1); | |
} | |
// ========================= getStyleProperty by kangax =============================== |
Sometimes you want to have a subdirectory on the master
branch be the root directory of a repository’s gh-pages
branch. This is useful for things like sites developed with Yeoman, or if you have a Jekyll site contained in the master
branch alongside the rest of your code.
For the sake of this example, let’s pretend the subfolder containing your site is named dist
.
Remove the dist
directory from the project’s .gitignore
file (it’s ignored by default by Yeoman).
#!/bin/bash | |
# __ | |
# _____ ____ _/ |_ ____ ____ _______ | |
# / \ _/ __ \ \ __\_/ __ \ / _ \ \_ __ \ | |
# | Y Y \\ ___/ | | \ ___/ ( <_> ) | | \/ | |
# |__|_| / \___ > |__| \___ > \____/ |__| | |
# \/ \/ \/ | |
# | |
# .___ | |
# __| _/ __ __ _____ ______ |
var cluster = require('cluster'); | |
var PORT = +process.env.PORT || 1337; | |
if (cluster.isMaster) { | |
// In real life, you'd probably use more than just 2 workers, | |
// and perhaps not put the master and worker in the same file. | |
cluster.fork(); | |
cluster.fork(); | |
cluster.on('disconnect', function(worker) { |
A timeline of the last four years of detecting good old window.localStorage
.
October 2009: 5059daa
(by @andrestaltz)
If you prefer to watch video tutorials with live-coding, then check out this series I recorded with the same contents as in this article: Egghead.io - Introduction to Reactive Programming.