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方法用于检查文件状态,确保路径存在。

上一篇:express之router
下一篇:.NET开发微信小程序-生成二维码

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月21日 15时32分25秒