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(404,'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的对象
        
    });


}

猜你喜欢

转载自www.cnblogs.com/ellen-mylife/p/10932972.html