node package manager
Loosely couple your services. Use Orgs to version and reuse your code. Create a free org »


Demand module

Form error handling for dietjs

How it works?

  • You can demand request.body[..] values to match criterias like existence, length etc..
  • The module is accessible in every POST request
  • The module can be accessed with the request.demand function
  • The module accepts unlimited agruments, each argument by right goes deeper in request.body
  • If request.passed is true than the form request has passed
  • If request.passed is false then request.errors contains the errors in JSON
  • You can answer if
    • request.passed with response.success(data)
    • else with response.error(data)
    • data is optional


When a POST request comes in (from a form or ajax request) with these parameters:

        'remain_logged_in': true

You can check if everything is ok with the submitted data with request.check:

var app = new Application(options);
app.get('/login', function(request, response, mysql){
    // DEMAND values to be specific 
    request.demand('options', 'remain_logged_in').isBoolean().length(0,1);
    // IF request has passed  
        response.success(); // { passed: true, errors: false} 
    } else {
        response.error(); // { passed: true, errors: [{..},{..}]} 

Demand Functions

Function Condition Example Use Case
is regex /([0-9]+)/i request.demand('id').is(/([0-9]+)/i)
isset defined undefined vs hell world request.demand('message').isset()
isArray array [1,3,5,7] request.demand('users').isArray()
isNumber integer 8080 request.demand('birth_day').isNumber()
isBoolean boolean true or false request.demand('agree').isBoolean()
isText alpha A simple text request.demand('username').isText()
isString string 52 people likes you today! request.demand('message').isString()
isSlug slug seomthing_like_this_842 request.demand('username').isSlug()
isEmail email request.demand('email').isEmail()
isURL url request.demand('personal_blog').isUrl()
length range hello is 4 request.demand('tweet').length(0, 140)
equals comparison comparing value a with b request.demand('agree').equals('true')

Register Errors

  • request.error(field, message) - both attributes are required

Respond with JSON

  • response.success(data)
    • the default response value is { passed: true, errors: false}
    • data is appended to the default json response but it's optional
  • response.error(data)
    • the default response value is { passed: false, errors: [...]}
    • data is appended to the default json response but it's optional
    • errors contain a list of erros with

Version History


  • added: request.error(field, message)
  • added: response.success(data)
  • added: response.error(data)


  • added Echo to arguments for multi language isset demading
  • Several Bug Fixes


  • First Release