Изучение ноды я начал с создания собственного фреймворка. Основная задача оного - обеспечение модульности. Стандартный механизм не слишком удобен:
var connect= require( 'connect' )
var http= require( 'http' )
var app= connect( connect.static( 'public' ) )
http.createServer( app ).listen( 80 )
Мой вариант лаконичней:
$= require( 'jin' ).loader()
var app= $.connect( $.connect.static( 'public' ) )
$.http.createServer( app ).listen( 80 )
Так вот, загруженные таким образом модули заворачиваются в специальный прокси, который превращает асинхронный апи в синхронный.
Вот полный пример использования асинхронного апи:
var dns= require( 'dns' )
dns.lookup( 'google.com', function( err, res ){
if( err ) return console.log( err )
console.log( 'Google ip:', res )
} )
А вот его добавленная фреймворком синхронная версия:
require( 'jin' ).application( function( $ ){
console.log( 'Google ip:', $.dns.lookupSync( 'google.com' ) )
console.log( 'Yandex ip:', $.dns.lookupSync( 'yandex.com' ) )
} )
Которая только выглядит синхронной, но на самом деле выполняется запрос асинхронно и другие потоки вполне себе продолжают работать.
Больше примеров можно найти на сайте проекта:
https://github.com/nin-jin/node-jin