node.js web micro framework
JavaScript
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib
tests
.gitignore
LICENSE
README.md
Ys.js
client.js
decorators.js
package.json

README.md

Ys

Node.js micro web framework.

Installation

npm install ys

Hello World:

var Ys = require('ys').Ys;

Ys("^/$").get = function(req,res){
    res.end("Hello World!");
};

Ys.run({debug:true});

In debug mode the server reloads itself on source changes. Do not use in production.

API:

Server Run Params

Ys.run({
    host:"localhost",//default
    port:8780,//default
    user:"nabriski",//no default, will set the process's user to this user after binding to port
    partials : { // path to handlebars' partials
                "path":".",//default - path to look for partial files
                "ext":"mustache"//extension of partial files
    },
    debug:false,//default, if set to true server will restart if file including Ys has changed
    onInit:null, //default, optional callback to be called when Ys starts listening to requests
    pidFile:null, //default, optional file where pid of process is written,
    exceptionHandler : null //default, set a function to handle uncaught exceptions
});

Generic Response

Ys("^/$").get = function(req,res){
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.end("<h1>Hello World!</h1>");
};

JSON Response

Ys("^/json$").get.json = function(req,res){
    res.returnObject({"message" : "Hello World"});
};

Templating

// return html response using template 'hello.html' 
// (default template engine is 'handlebars.js' but any template engine with a 'compile' method can be defined)
// Where 'hello.html' is:
// <h1>Hello {{name}}!</h1>
Ys("^/hello_bob$").get.template = {'hello.html':function(req,res){
    res.returnObject({"name" : "Bob"};);
}};

Echo Server

Ys("^/hello/(\\w+)/$").get = function(req,res){
    res.end("Hello "+req.$1+"!");
};

Static Files

//return static files
Ys("^/static/.*$").get.static = ".";

//return gzipped file (depends on client's accept encoding)
Ys("^/gzip/.*$").get.gzip = ".";

Redirect

Ys("^(.*/[^\./]+)$").redirect = "$1/";//adds a trailing slash when missing

Rewrite

//rewrite /json_alias/ to /json/
// must appear before the /json/ route
Ys("^/json_alias/$").rewrite = "/json/";

Ys("^/json$").get.json = function(req,res){
    res.returnObject({"message" : "Hello World"};);
};

Proxy

//proxy all requests to http://localhost:8080/
Ys("^/.*$").proxy = "http://localhost:8080/";

Running Multiple Instances

var a= Ys.instance(), b = Ys.instance();

a("^/$").get.html = function(req,res){
    res.end("<h1>Instance A</h1>");
};
a.run({port:8780};);

b("^/$").get.html = function(req,res){
    res.end("<h1>Instance B</h1>");
};
b.run({port:8781});