
express之view.js
> > >
发布日期:2021-05-28 16:24:00
浏览次数:32
分类:精选文章
本文共 1958 字,大约阅读时间需要 6 分钟。
<<linux服务器部署脚本>>
<function View(name, options) { var opts = options || {}; this.defaultEngine = opts.defaultEngine; this.ext = extname(name); this.name = name; this.root = opts.root; if (!this.ext && !this.defaultEngine) { throw new Error('No default engine was specified and no extension was provided.'); } var fileName = name; if (!this.ext) { this.ext = this.defaultEngine[0] !== '.' ? '.' + this.defaultEngine : this.defaultEngine; fileName += this.ext; } if (!opts.engines[this.ext]) { var mod = this.ext.substr(1); var fn = require(mod).__express; if (typeof fn !== 'function') { throw new Error('Module "' + mod + '" does not provide a view engine.'); } opts.engines[this.ext] = fn; } this.engine = opts.engines[this.ext]; this.path = this.lookup(fileName);}
<
View.prototype.lookup = function lookup(name) { var path; var roots = [].concat(this.root); for (var i = 0; i < roots.length && !path; i++) { var root = roots[i]; var loc = resolve(root, name); var dir = dirname(loc); var file = basename(loc); path = this.resolve(dir, file); } return path;}
View.prototype.render = function render(options, callback) { debug('render "%s"', this.path); this.engine(this.path, options, callback);}
View.prototype.resolve = function resolve(dir, file) { var ext = this.ext; var path = join(dir, file); var stat = tryStat(path); if (stat && stat.isFile()) { return path; } path = join(dir, basename(file, ext), 'index' + ext); var stat = tryStat(path); if (stat && stat.isFile()) { return path; } throw new Error('No file found');}
<
function tryStat(path) { try { return fs.statSync(path); } catch (e) { return undefined; }}
<<debug简化>>
该代码模块定义了一个View
类,用来处理动态视图渲染。View
类初始化时会根据配置确定默认引擎以及文件扩展名,并负责从指定路径中找到完整文件路径。通过lookup
方法,类能够模拟文件系统结构,找到视图文件的实际路径。render
方法则将视图渲染到页面中,resolve
方法用于处理路径递归和文件扩展名处理。最后,tryStat
方法用于检查文件状态,确保路径存在。 发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月21日 15时32分25秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
旅游后期效果Ography Lightroom预设
2019-03-15
唯美动漫插画高清壁纸
2019-03-15
圆角几何艺术动态壁纸
2019-03-15
SpamSieve for mac(邮件过滤器)
2019-03-15
炫酷的圣诞球徽标AE模板
2019-03-15
清新的彩虹折线PS填充图案
2019-03-15
uFocus for Mac(mac文本编辑器)
2019-03-15
2017CS231n笔记5.CNN
2019-03-15
Linux系统安装Nodejs
2019-03-15
vue项目报错集合
2019-03-15
golang语法基础 编译、运行
2019-03-15
图片链接
2019-03-15
html-javascript网页编辑-绘图连线
2019-03-15
C-Makefile的简单规则与介绍
2019-03-15
LINUX-WIFI无线接入的一些东西
2019-03-15
word文档手写字母总会大写问题
2019-03-15
<9>linux中的火墙策略优化
2019-03-15
Redis中的key
2019-03-15
Andriod进阶之路 - DataBinding的简单使用
2019-03-15
juc-09-控制并发流程工具类
2019-03-15