Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Grasshopper is a feature-rich and flexible MVC framework for web applications and services built on node.js.
JavaScript
Tree: 83502d18b1

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
examples
lib
test
.gitmodules
LICENSE.txt
README.md
index.js

README.md

** WARNING This version needs the current development version of node.js to run. Use 0.1.0 if you're using a release version of node. **

Grasshopper

A simple MVC framework for web applications built on node.JS. Follow the instructions to install node.JS. Join the mailing list for further help and feedback.

This framework is licensed under the terms of Apache License, Version 2.0.

Features

  • Integrated support for dependency injection.
  • Filters for intercepting requests.
  • Allows adding view helpers to enable smarter views.
  • Layout and "include" support for views.
  • Automatic selection of view file based on request's extension.
  • Session management with support for custom session storage.
  • Simple API to create and consume cookies.
  • Fast file uploads using node-formidable.
  • Makes sending files as response attachments using 'Content-Disposition' simple.
  • Supports partial download of static files.
  • Plenty of documentation through examples (Wiki will be updated with more tutorials).

Hello World

  1. Clone the repository using git clone git://github.com/tuxychandru/grasshopper.git && cd grasshopper/ && git submodule init && git submodule update.
  2. Create a directory for your application and symlink the cloned repository to it.
  3. Create a file named hello.js in your application's directory with the following content.

    var gh = require('./grasshopper');
    
    gh.get('/', function() {
            this.renderText('Hello World!');
    });
    
    gh.serve(8080);
    
  4. From your applications directory invoke the command node hello.js.

  5. Point your browser at http://localhost:8080.

Arguments in URL and Template Files

Arguments passed as part of the URL can be obtained with an additional parameter in the controller function, to which a hash of arguments defined between {} in your route and their values would be passed.


Template File Format (GHP - GrassHopper Pages)

  1. Text inside <% and %> are evaluated as Javacript code.
  2. Text inside <%= and %> are evaluated as Javascript code and its result is included into the output.


  3. Create a file named greeting.html in your application's directory with the following content. This would act as your template file.

    <html>
        <head>
            <title>Template Sample</title>
        </head>
        <body>
            <h1>Welcome, <%= name %>!</h1>
        </body>
    </html>
    
  4. Create a file named template.js in your application's directory with the following content. The 'model' property of 'this' must be setup with the data items used in the template. The render function must be invoked with the name of a template file (without extension). The extension of the template file to use is determined by the extention of the request URL (.html, if none specified).

    var gh = require('./grasshopper');
    
    gh.get('/greetings/{name}', function(args) {
            this.model['name'] = args.name;
            this.render('greeting');
    });
    
    gh.serve(8080);
    
  5. From your applications directory invoke the command node template.js.

  6. Point your browser at http://localhost:8080/greetings/ABC.

Dependency Injection

Hashes containing the necessary dependencies can be added to the this context of your controller functions, using the gh.addToContext() function. You can either specify all the hashes to be included in a single invocation or in multiple invocations. For example,

var gh = require('./grasshopper');

var dependencies = {
    dataService: {
        getStock: function() {
            return 100;
        }
    }
};
gh.addToContext(dependencies);

gh.get('/', function() {
    this.renderText('There are ' + this.dataService.getStock() + ' units in stock!');
});

gh.serve(8080);

To Do

  • Support conditional GET when serving static files.
  • Support flash messages.
  • Support validation and updation of objects(models) from request parameters.
Something went wrong with that request. Please try again.