12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- var pathRegexp = require('path-to-regexp');
- var debug = require('debug')('express:router:layer');
- module.exports = Layer;
- function Layer(path, options, fn) {
- if (!(this instanceof Layer)) {
- return new Layer(path, options, fn);
- }
- debug('new %s', path);
- options = options || {};
- this.regexp = pathRegexp(path, this.keys = [], options);
- this.handle = fn;
- }
- Layer.prototype.match = function(path){
- var keys = this.keys;
- var params = this.params = {};
- var m = this.regexp.exec(path);
- var n = 0;
- var key;
- var val;
- if (!m) return false;
- this.path = m[0];
- for (var i = 1, len = m.length; i < len; ++i) {
- key = keys[i - 1];
- try {
- val = 'string' == typeof m[i]
- ? decodeURIComponent(m[i])
- : m[i];
- } catch(e) {
- var err = new Error("Failed to decode param '" + m[i] + "'");
- err.status = 400;
- throw err;
- }
- if (key) {
- params[key.name] = val;
- } else {
- params[n++] = val;
- }
- }
- return true;
- };
|