node——underscore的使用
我在做新闻页面时,需要将之前存好点的data.json里的数据显示在首页上,而首页的每条新闻数据不能直接写定在上面,所以我们要将data里面的数据传递进去。我们需要使用underscore的template函数。
之前在underscore的简单了解中已经讲过template了,接下来就直接用
1.首先我们要在首页的响应代码里面找到data.json,将它存进list_news数组里面
fs.readFile(path.join(__dirname,'data','data.json'),'utf8',function(err,data){
//因为第一次访问网站,data.json文件本身就不存在,所以会有异常
//这种错误,我们不认为是网站出错了,所以不需要抛出异常
if(err&&err.code!=='ENOENT'){
throw err;
}
//如果data没有读取到,则data为空,转换为数组
var list_news=JSON.parse(data||'[]');
});
这段代码之前写过了
2.然后我们需要渲染html文件,在以前写过一个res.render函数,渲染时传入html文件路径
fs.readFile(path.join(__dirname,'data','data.json'),'utf8',function(err,data){
if(err&&err.code!=='ENOENT'){
throw err;
}
var list_news=JSON.parse(data||'[]');
res.render(path.join(__dirname,'views','home.html'));
});
但是现在还需要传入list_news,就需要在修改res,render函数
res.render=function(filename,tqData){
fs.readFile(filename,function(err,data){
if(err)
{
res.writeHead(,'Not Found',{'Content-Type':'text/html;charset=utf-8'});
res.end('44,not found');
return;
}
if(tqData){
//如果用户传递了模板数据,表示模板要替换,否则不替换
//因为data是二进制,模板是字符串,所以要将data转换为字符串
// data=_.template(data.toString('utf8'))(tqData);
//上面的代码和下面的代码等价
var fn=_.template(data.toString('utf8'));
data=fn(tqData);
}
res.end(data);
})
}
在使用时:
if(req.url==='/'||req.url==='/index'&&req.method==='get')
{
//1.读取data.json文件中的数据,并将读取到的数据转化为list_news数组
fs.readFile(path.join(__dirname,'data','data.json'),'utf8',function(err,data){ if(err&&err.code!=='ENOENT'){
throw err;
} var list_news=JSON.parse(data||'[]'); //2.在服务器端使用模板引擎,将list中的数据和index.html文件中的内容结合,渲染给客户端
res.render(path.join(__dirname,'views','home.html'),{list:list_news});//这里要传一个叫list的对象 }); }
node——underscore的使用的更多相关文章
- babeljs源码
babel.min.js!function(e,t){"object"==typeof exports&&"object"==typeof mo ...
- Underscore.js
概述 Underscore.js是一个很精干的库,压缩后只有4KB.它提供了几十种函数式编程的方法,弥补了标准库的不足,大大方便了JavaScript的编程.MVC框架Backbone.js就将这个库 ...
- 新手入门Underscore.js 中文(template)
Underscore.js是一个很精干的库,压缩后只有4KB.它提供了几十种函数式编程的方法,弥补了标准库的不足,大大方便了javaScript的编程.MVC框架Backbone.js就将这个库作为自 ...
- 如何在Node.js中合并两个复杂对象
通常情况下,在Node.js中我们可以通过underscore的extend或者lodash的merge来合并两个对象,但是对于像下面这种复杂的对象,要如何来应对呢? 例如我有以下两个object: ...
- Node实践之一
大家都知道JavaScript的专长就是处理客户端也就是与浏览器打交道了,所有的与服务器端的交互必须交给后台语言处理程序去做,基于JavaScript不能与服务器进行直接交互这样一个现状,Ryan D ...
- Node.js 学习资源
这篇文章编译整理自Stack Overflow的一个如何开始学习Node.js的Wiki帖,这份资源列表在SO上面浏览接近60万次,数千个收藏和顶.特意整理发布到这里,其中添加了部分中文参考资料. 学 ...
- Node.js开发利器
开发工具 WebStorm,毫无疑问非他莫属,跨平台,强大的代码提示,支持Nodejs调试,此外还支持vi编辑模式,这点我很喜欢. 做些小型项目用Sublime Text. Browserify:将你 ...
- underscore源码解析 (转载)
转载出自http://www.cnblogs.com/human/p/3273616.html (function() { // 创建一个全局对象, 在浏览器中表示为window对象, 在Node.j ...
- Node.JS 学习路线图
转载自:http://www.admin10000.com/document/4624.html 从零开始nodejs系列文章, 将介绍如何利Javascript做为服务端脚本,通过Nodejs框架w ...
随机推荐
- bzoj 1191: [HNOI2006]超级英雄Hero 网络流_残量网络
题目描述: 现在电视台有一种节目叫做超级英雄,大概的流程就是每位选手到台上回答主持人的几个问题,然后根据回答问题的 多少获得不同数目的奖品或奖金.主持人问题准备了若干道题目,只有当选手正确回答一道题后 ...
- python实现定时发送消息
#!/usr/bin/env python#-*- coding:utf-8 -*- @Author : wujf @Time:2018/8/21 15:59# 自动发送消息from threadin ...
- linux 遇到(vsftpd)—500 OOPS:chroot
今天在用vsftpd 时出现一个问题: 500 OOPS:chroot 解决办法: 1.关闭SELINUX [root@localhost ~]#vi /etc/sysconfig/selinux # ...
- Python Django log日志
log日志 log开发日志 一.创建项目 1.python -m venv ll_env # 创建虚拟环境 2.source ll_env/bin/activate # 激活虚拟环境 3.pip in ...
- powershell远程访问
在服务器上打开powershell 1.winrm quickconfig 2.Enable-PSRemoting -Force 在客户端上打开powershell 1.Enter-PSSession ...
- BA-风阀水阀执行器接线图
220水阀执行器接线图 24V风阀执行器接线图
- [HTML 5] More about ARIA Relationships
- 图像算法研究---Adaboost算法具体解释
本篇文章先介绍了提升放法和AdaBoost算法.已经了解的可以直接跳过.后面给出了AdaBoost算法的两个样例.附有详细计算过程. 1.提升方法(来源于统计学习方法) 提升方法是一种经常使用的统计学 ...
- Cocos2d-x3.0 从代码中获取cocostudio编辑的UI控件
依据名字查找控件 须要包括的头文件及名字空间: #include "cocostudio/CocoStudio.h" #include "ui/CocosGUI.h&qu ...
- linux下解决非本机访问出现的提示
安装完毕之后发现无法用IP访问,出现以下提示 Access forbidden! New XAMPP security concept: Access to the requested directo ...