OurJS


OurJS-我们的JS, 我们的技术-IT文摘; 专注JS相关领域;
我们热爱编程, 我们热爱技术;我们是高大上, 有品味的码农;

欢迎您订阅我们的技术周刊


我们会向您分享我们精心收集整理的,最新的行业资讯,技术动态,外文翻译,热点文章;
我们使用第三方邮件列表向您推送,我们不保存您的任何个人资料,注重您的隐私,您可以随时退订,

欢迎分享您的观点,经验,技巧,心得

让我们一起找寻程序员的快乐,探索技术, 发现IT人生的乐趣;


本网站使用缓存技术每次加载仅需很小流量, 可在手机中流畅浏览;
如果您发现任何BUG,请即时告知我们: ourjs(at)ourjs.com

OnceIO(Node.JS)中的模板引擎是什么及MVC设计模式的使用与实现


分享到
分类 JS学习   关键字 Node.JS   发布 ourjs  1477375331901
注意 转载须保留原文链接,译文链接,作者译者等信息。  

OnceIOOnceDoc企业私有内容(文档)管理系统的底层Web框架,它可以实现模板文件、静态文件的全缓存,运行起来完全不需要I/O操作,并且支持客户端缓存优化,GZIP压缩等(只压缩一次),拥有非常好的性能,为您节约服务器成本。它的模块化功能,可以让你的Web进行分布式存储,在一个扩展包里即可包含前端、后端和数据库定义,只需通过添加/删除目录的方式就可实现功能删减,实现真正的模块化扩展。目前OnceIO已经开源,这里是介绍如何使用的一系列文章。

 

原文: http://cn.oncedoc.com/blog/view/iup2u927oyqz


这一节主要介绍OnceIO(NodeJS)中模板引擎的使用。模板引擎是为了使用户界面与业务数据(内容)分离而产生的,模板引擎可以让(网站)程序实现界面与数据分离,在将数据填充到模板并最终生成HTML的过程中,天然就体现了MVC设计模式(Model-view-controller)的思想。 MVC 模式是一种动态的程序设计架构,用一种将业务逻辑、数据、界面显示分离的方法组织代码。简化后续对程序的修改和扩展,并且使程序的某一部分的重复利用成为可能。

 MVC

 

模型(Model)

模型用于封装与应用程序的业务逻辑相关的数据,在跟其他NodeJS框架一样,OnceIO采用JavaScript原生对象JSON来表示model。  

Model 可以在应用级别使用,成为在应用的整个生命期间都有效的全局变量,例如:

app.model({ title: 'test_page', debug: true }) 

也可以在 middleware和handler 中使用,成为只在当前请求-响应循环中有效的本地变量,例如:

app.use(function(req, res) {
  res.model.debug = false
  res.model.username = 'Kris'
  req.filter.next()
})

app.get('/view', function(req, res) { 
  var userModel = { username: 'Rex' }
  res.render('model.html', userModel)
})

在全局 model 和本地 model 同时存在时,两者会自动合并,如果其中有重复的属性,handler 中的 model 会覆盖 middleware 中的 model, 本地 model 中的属性会覆盖全局 model 中的。例如,当上面所有代码在服务器文件中同时存在时,userModel 会与 res.model 合并并且覆盖 res.model 中的 username 属性。然后两者合并产生的 model 会与 app.model 合并并且覆盖其中的 debug 属性。最后在 '/view' 路径下,各属性的值为:

 merge

 

视图(View)

视图用于有目的地显示数据,对应项目文件夹中的网页文件,例如文件夹中的 model.html.

模板引擎能够将规定格式的模板代码转换为业务数据,因此我们可以使用模板引擎通过模型来改变视图。例如在下面的代码中,模型中 title、debug 和 username 属性的值会影响视图的显示内容。OnceIO默认采用的是doT模板引擎, 其性能较好,规则也较为简单。当然您也以切换成你自己熟悉的模板引擎,如EJS和PUG(jade)。

<!DOCTYPE html>
<body>
  <h1> Title: {{=it.title}} </h1>
  <h1> Debug: {{=it.debug}} </h1>
  <h1> Username: {{=it.username}} </h1>
</body>
</html>

 

控制器(Controller)

控制器用于控制应用程序的流程,处理事件并作出响应。它对应项目文件夹中的服务器文件,例如文件夹中的 websvr.js。

我们可以通过控制器对模型进行操作,例如在以下代码中,控制器将 URL 参数赋值给模型 userModel 的属性 username,使用户能通过改变输入的地址来改变模型,进而改变视图,控制器通过 response 对象的 render 方法(res.render) 将模型数据(userModel)填充进视图(model.html)渲染成真正的HTML。

app.get('/view/user/:username', function(req, res) { 
  var userModel = { username: req.params.username }
  res.render('model.html', userModel)
})

代码实现效果如下图:

 1

 2

 

 

OnceIO地址:  https://github.com/OnceDoc/onceio

上一篇: NodeJS中的Middleware是什么?在OnceIO中创建和使用中间件

 

原文地址: 点此
社区评论 ( Beta版 )
OnceDoc 您自己的企业内容管理系统——文档、流程、知识库、报表、网盘All In One

访问404页面,寻找丢失儿童
 热门文章 - 分享最多
  1. 阿里任性Hr开除月饼极客:这样冰冷的公司没什么值得我留恋
  2. GitHub2016报告AngularJS流行度下降,JavaScript活跃度为Java两倍
  3. 在 2016 年学 JavaScript 是一种什么样的体验?
  4. 2016年收入最高的5个编程语言,JavaScript最流行,Java和C没在前5
  5. 传言GITHUB正在寻求第二轮融资,或面临估值下降、清算或被微软收购
  6. JavaScript函数式编程(一、二、三)
  7. Java 之父求职被嫌年纪大,硅谷公司现在喜欢“小鲜肉”,不爱“老古董”
  8. NodeJS中的Middleware是什么?在OnceIO中创建和使用中间件
  9. 用OnceIO(NodeJS)搭建简单的web服务器
  10. AirJD-简单好用的免费建站工具

 相关阅读 - JS学习
  1. NodeJS中的Middleware是什么?在OnceIO中创建和使用中间件
  2. 用OnceIO(NodeJS)搭建简单的web服务器
  3. JavaScript函数式编程(一、二、三)
  4. JavaScript在物联网中的应用
  5. 如何编写 jQuery 插件
  6. NodeJS中npm3相对于npm2模块依赖目录层欠的改进
  7. JavaScript的 Event Loop 模型
  8. You Don't Need jQuery
  9. Node.js单元测试、集成测试、基准测试以及代码覆盖率测试方面总结
  10. 基础 JavaScript 装X指南

 关键字 - Node.JS
  1. Node.js框架之express
  2. 在nodejs中使用Redis缓存和查询数据及Session持久化(Express)
  3. Node.JS编码规范指南教程:教你优雅地写JavaScript代码
  4. Express入门教程:一个简单的博客
  5. NodeJS动态传参特性:不定个数参数的省略,默认值与解构
  6. Debug调试Node.JS:我们是如何定位内存泄漏和无限循环的
  7. 6款基于Node.JS的开源内容管理和静态网站生成系统
  8. Node.JS中如何判断递归嵌套的所有回调函数已经执行完毕,以读取目录下所有文件为例:计数比Promise方式快将近一倍
  9. Node.js网页抓取:一个最简单的http请求客户端示例(request client)
  10. 为什么你应该抛弃Express的视图渲染引擎

 欢迎订阅 - 技术周刊

我们热爱编程, 我们热爱技术; 我们是高端, 大气, 上档次, 有品味, 时刻需要和国际接轨的码农; 欢迎您订阅我们的技术周刊; 您只需要在右上角输入您的邮箱即可; 我们注重您的隐私,您可以随时退订.
加入我们吧! 让我们一起找寻码农的快乐,探索技术, 发现IT人生的乐趣;


 关注我们

我们的微信公众号: ourjs-com
打开微信扫一扫即可关注我们:
IT文摘-程序员(码农)技术周刊

ourjs官方微信号