Вход Регистрация
Файл: error-kitty/node_modules/express/lib/router/route.js
Строк: 114
<?php
/**
 * Module dependencies.
 */

var debug = require('debug')('express:router:route');
var 
Layer = require('./layer');
var 
methods = require('methods');
var 
utils = require('../utils');

/**
 * Expose `Route`.
 */

module.exports Route;

/**
 * Initialize `Route` with the given `path`,
 *
 * @param {String} path
 * @api private
 */

function Route(path) {
  
debug('new %s'path);
  
this.path path;
  
this.stack = [];

  
// route handlers for various http methods
  
this.methods = {};
}

/**
 * @api private
 */

Route.prototype._handles_method = function _handles_method(method) {
  if (
this.methods._all) {
    return 
true;
  }

  
method method.toLowerCase();

  if (
method === 'head' && !this.methods['head']) {
    
method 'get';
  }

  return 
Boolean(this.methods[method]);
};

/**
 * @return {Array} supported HTTP methods
 * @api private
 */

Route.prototype._options = function(){
  return 
Object.keys(this.methods).map(function(method) {
    return 
method.toUpperCase();
  });
};

/**
 * dispatch req, res into this route
 *
 * @api private
 */

Route.prototype.dispatch = function(reqresdone){
  var 
idx 0;
  var 
stack this.stack;
  if (
stack.length === 0) {
    return 
done();
  }

  var 
method req.method.toLowerCase();
  if (
method === 'head' && !this.methods['head']) {
    
method 'get';
  }

  
req.route this;

  
next();

  function 
next(err) {
    if (
err && err === 'route') {
      return 
done();
    }

    var 
layer stack[idx++];
    if (!
layer) {
      return 
done(err);
    }

    if (
layer.method && layer.method !== method) {
      return 
next(err);
    }

    if (
err) {
      
layer.handle_error(errreqresnext);
    } else {
      
layer.handle_request(reqresnext);
    }
  }
};

/**
 * Add a handler for all HTTP verbs to this route.
 *
 * Behaves just like middleware and can respond or call `next`
 * to continue processing.
 *
 * You can use multiple `.all` call to add multiple handlers.
 *
 *   function check_something(req, res, next){
 *     next();
 *   };
 *
 *   function validate_user(req, res, next){
 *     next();
 *   };
 *
 *   route
 *   .all(validate_user)
 *   .all(check_something)
 *   .get(function(req, res, next){
 *     res.send('hello world');
 *   });
 *
 * @param {function} handler
 * @return {Route} for chaining
 * @api public
 */

Route.prototype.all = function(){
  var 
self this;
  var 
callbacks utils.flatten([].slice.call(arguments));
  
callbacks.forEach(function(fn) {
    if (
typeof fn !== 'function') {
      var 
type = {}.toString.call(fn);
      var 
msg 'Route.all() requires callback functions but got a ' type;
      throw new 
Error(msg);
    }

    var 
layer Layer('/', {}, fn);
    
layer.method undefined;

    
self.methods._all true;
    
self.stack.push(layer);
  });

  return 
self;
};

methods.forEach(function(method){
  
Route.prototype[method] = function(){
    var 
self this;
    var 
callbacks utils.flatten([].slice.call(arguments));

    
callbacks.forEach(function(fn) {
      if (
typeof fn !== 'function') {
        var 
type = {}.toString.call(fn);
        var 
msg 'Route.' method '() requires callback functions but got a ' type;
        throw new 
Error(msg);
      }

      
debug('%s %s'methodself.path);

      var 
layer Layer('/', {}, fn);
      
layer.method method;

      
self.methods[method] = true;
      
self.stack.push(layer);
    });
    return 
self;
  };
});
?>
Онлайн: 4
Реклама