Node.js开发札记之二·页面篇

前言:

原本纠结于Web 模板,选了Handlebars。后来发现页面都是弱逻辑的,不支持复杂逻辑表达式。几乎要放弃之际,想起了Javascript中eval函数。虽然eval函数很强大,强大到可以“凭空”生成对象或执行代码,但总觉得他破坏了代码的优雅性。加之"eval"和"evil"(邪恶)长得挺像的。Eval函数的印象不太好,大多数时候将其当做"禁手"。这时候反正也没有什么好办法了。通过Handlebars自定义函数使用eval执行想要的逻辑。以拼接字符的模式来进行逻辑判断理论上可以如同EL表达式一样处理页面上的大部分逻辑。好像效果还不错哦。

案例:

安装handlebars

npm install handlebars

还是在我们之前的express项目里。建两个文件。

模板:test_expression.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
{{#expression '(' x.a'==' 3 '||' x.a'>' 4 ')&&' x.b'>' 1}}
green
{{else}}
red
{{/expression}}
</body>
</html>

js代码:test_expression.js

var fs = require('fs');
var hbs = require('handlebars');
//主要思想是使用eval执行想要的逻辑。以拼接字符的模式来进行逻辑判断理论上可以如同EL表达式一样处理页面上的大部分逻辑。如:{{#expression a '==' b '&&' c '>' 0}}
hbs.registerHelper('expression', function() {
    var exps = [];
 	try{
 	//最后一个参数作为展示内容,也就是平时的options。不作为逻辑表达式部分
 	var arg_len = arguments.length;
var len = arg_len-1;
for(var j = 0;j<len;j++){
exps.push(arguments[j]);
}
var result = eval(exps.join(' '));
if (result) {
  return arguments[len].fn(this);
} else {
  return arguments[len].inverse(this);
}
 	}catch(e){
 	throw new Error('Handlerbars Helper "expression" can not deal with wrong expression:'+exps.join(' ')+".");
 	}
 });

var template = hbs.compile(fs.readFileSync('../templates/test_expression.html').toString());
var http =require("http");
http.createServer(function(request,response) {
   var conditions = {x:{a:4,b:2}};
   var html = template(conditions);
   response.writeHead(200, {
          "Content-Type":"text/html",
          "charset":"UTF-8"
   });
   response.write(html);
   response.end();
}).listen(3000);

运行CMD命令行模式下进入node.express\test目录下执行node test_expression.js

可以改变var conditions = {x:{a:4,b:2}}来验证逻辑表达式。

总结:

万分感谢能看到这里的童鞋。上面的内容其实就是一些基本的套页面流程。着重点在于handlebar的自定义helper功能和解决页面弱逻辑。个人支持handlebar作者提出的页面弱逻辑观点。但是觉得至少得支持下逻辑表达式。否则一个页面写一堆if else或其他逻辑表达式衍生代码,太累人了。一度想要放弃这块。直到写出expression标签,发现前面又有路了。预知后事如何,且听下回分解。

时间: 2024-10-05 03:52:26

Node.js开发札记之二·页面篇的相关文章

Node.js开发札记之一&#183;入门篇

前言: Node.js这个名字并不陌生.刚开始时,以为又是某个团体搞的JS类库.作为jQuery忠实追随者,当时还是比较关注这个异端的出现.后来发现,其实是服务器端的JS.用了J2EE那么多年了,没有心思再去搞这一套.还不如深入写下J2EE的架构什么的.而技术的革新的风暴还是席卷了整个IT界.鄙人再次了开启学习天赋. 环境搭建: 软件下载: 1. Node.js安装包 下载地址(详见官方博客:http://blog.nodejs.org 更新): http://nodejs.org/dist/v

用Node.js开发Windows 10物联网应用

(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 未来10年内,物联网将会如移动互联网这样深入到我们生活的各方各面.所以微软现在对物联网进行了大量的投资,比如Windows 10就有一个单独的IoT版本.而今天推荐的文章是告诉大家如何把Node.js开发带到Windows 10 IoT中. 在月初Build大会上,微软发布了Windows 10 IoT Core Insider Preview,这个版本可以安装到树莓派2(Raspberry Pi

在windows环境下基于sublime text3的node.js开发环境搭建

首先安装sublime text3,百度一堆,自己找吧.理论上sublime text2应该也可以.我只能说一句:这个软件实在是太强悍了. 跨平台,丰富的插件体系,加上插件基本上就是一个强悍的ide了.目前我在使用的主要是Emmet.Python.还有一些格式化的插件(xml,json),加上这次安装的node.js. node.js的安装就不用多说了,直接http://nodejs.org/ 点击install下载window版本的安装程序后安装即可.默认的安装会将安装目录加到path环境变量

Node.js开发入门—使用jade模板引擎

在"Node.js开发入门--Express安装与使用"里,我们曾经使用express generator创建了一个HelloExpress网站,express工具为我们生成了基本的目录结构.模板.stylesheet.routers等.虽然那只是一个简单的HelloWorld类的小东西,可里面包含的内容还是有些多了,为了更好的理解Express所支持的jade模板引擎的用法,我们这次提供一个手动创建的小网站,可以显示来访者的IP,并对访问进行计数. 安装jade npm instal

Node.js 开发指南笔记

第一章:node简介 介绍了node是什么:node.js是一个让javascript运行在服务器端的开发平台, node能做些什么:[书上的] 具有复杂逻辑的网站 基于社交网络的大规模Web应用 Web Socket服务器 TCP/UDP套接字应用程序 命令行工具 交互式终端程序 带有图形用户界面的本地应用程序 单元测试工具 客户端Javascript编译器 node能做些什么:[网上比较好的一段说明]: NodeJS的作者说,他创造NodeJS的目的是为了实现高性能Web服务器,他首先看重的

node.js操作数据库之MongoDB+mongoose篇

前言 node.js的出现,使得用前端语法(javascript)开发后台服务成为可能,越来越多的前端因此因此接触后端,甚至转向全栈发展.后端开发少不了数据库的操作.MongoDB是一个基于分布式文件存储的开源数据库系统.本文为大家详细介绍了如何用node.js + mongoose 玩转MongoDB.希望能帮到有需要的人. 由于我用Mac开发,以下所有操作都是在Mac下进行. 一. 环境搭建 安装Node.js 有 node 环境的可以跳过. nodejs官网提供了 macOS 安装包,直接

Mac下进行Node.js开发环境的配置

我们知道,Mac是一款天生可以提升我们开发效率的系统,合理的使用Mac下面的神器,有助于提升我们的开发效率.个人是个VIM控,今天分享一下,我在mac下是如何进行Node.js的开发环境搭建的.先给大家看看最终的效果图片吧! Iterm2 首先,推荐Iterm2这款命令行神器.它是一款终端替代工具,支持 Macos 10.5+ 版本.它具备很多优点:比如开源免费.快捷键丰富.水平垂直分屏.远程使用vi时兼容性好.如果再加上一点,就是它UI也比较友好,如果你喜欢捣鼓,可以配置主题,让iterm2界

Mac下进行Node.js开发环境配置

我们知道,Mac是一款天生可以提升我们开发效率的系统,合理的使用Mac下面的神器,有助于提升我们的开发效率.个人是个VIM控,今天分享一下,我在mac下是如何进行Node.js的开发环境搭建的.先给大家看看最终的效果图片吧! Iterm2 首先,推荐Iterm2这款命令行神器.它是一款终端替代工具,支持 Macos 10.5+ 版本.它具备很多优点:比如开源免费.快捷键丰富.水平垂直分屏.远程使用vi时兼容性好.如果再加上一点,就是它UI也比较友好,如果你喜欢捣鼓,可以配置主题,让iterm2界

推荐近期15个 Node.js 开发工具

近来Node.js 越来月流行了,这个基于Google V8 引擎建立的平台, 用于方便地搭建响应速度快.易于扩展的网络应用.在本文中,我们列出了2015年最佳的15个 Node.js 开发工具.这些工具对于刚刚开始学习 Node.js 的新手开发者非常有帮助.如果你知道任何其他有用的 Node.js 资源,请让我们知道. 1. IO.js JavaScript的I / O是一个NPM兼容的平台,最初是基于Node.js和建立在Chrome V8运行.它的目的是提供更快和可预测的发布周期. 2.