comparison node_modules/express/lib/view.js @ 73:0c3a2942ddee

now using express to server static content
author Rob Canning <rc@kiben.net>
date Sun, 29 Jun 2014 12:11:51 +0000
parents
children
comparison
equal deleted inserted replaced
72:9af4250ff7d5 73:0c3a2942ddee
1 /**
2 * Module dependencies.
3 */
4
5 var path = require('path');
6 var fs = require('fs');
7 var utils = require('./utils');
8 var dirname = path.dirname;
9 var basename = path.basename;
10 var extname = path.extname;
11 var exists = fs.existsSync || path.existsSync;
12 var join = path.join;
13
14 /**
15 * Expose `View`.
16 */
17
18 module.exports = View;
19
20 /**
21 * Initialize a new `View` with the given `name`.
22 *
23 * Options:
24 *
25 * - `defaultEngine` the default template engine name
26 * - `engines` template engine require() cache
27 * - `root` root path for view lookup
28 *
29 * @param {String} name
30 * @param {Object} options
31 * @api private
32 */
33
34 function View(name, options) {
35 options = options || {};
36 this.name = name;
37 this.root = options.root;
38 var engines = options.engines;
39 this.defaultEngine = options.defaultEngine;
40 var ext = this.ext = extname(name);
41 if (!ext && !this.defaultEngine) throw new Error('No default engine was specified and no extension was provided.');
42 if (!ext) name += (ext = this.ext = ('.' != this.defaultEngine[0] ? '.' : '') + this.defaultEngine);
43 this.engine = engines[ext] || (engines[ext] = require(ext.slice(1)).__express);
44 this.path = this.lookup(name);
45 }
46
47 /**
48 * Lookup view by the given `path`
49 *
50 * @param {String} path
51 * @return {String}
52 * @api private
53 */
54
55 View.prototype.lookup = function(path){
56 var ext = this.ext;
57
58 // <path>.<engine>
59 if (!utils.isAbsolute(path)) path = join(this.root, path);
60 if (exists(path)) return path;
61
62 // <path>/index.<engine>
63 path = join(dirname(path), basename(path, ext), 'index' + ext);
64 if (exists(path)) return path;
65 };
66
67 /**
68 * Render with the given `options` and callback `fn(err, str)`.
69 *
70 * @param {Object} options
71 * @param {Function} fn
72 * @api private
73 */
74
75 View.prototype.render = function(options, fn){
76 this.engine(this.path, options, fn);
77 };