渲染 index 页面新闻列表数据02|学习笔记

简介: 快速学习渲染 index 页面新闻列表数据02

开发者课程【Node.js 入门与实战:渲染 index 页面新闻列表数据01】学习笔记,与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/588/detail/8287


渲染index页面新闻列表数据02

 

目录:

一、index简介

二、应用

一、index简介

render函数与 template 函数源码 。render 声明函数内部变量,Function为方法,source为源代码,声明变量对字符串进行截取操作,复制给source全部进行动态生成,用生成的代码构建一个函数,调动其动态生成的函数

 

二、应用

1.代码示例

//Demo:

Var_ =require(underscore);

//声明了一段代码模板代码的HTML文档

Var heml =<h2><%=·name·%><h2>

//template()函数的返回依然是一个函数

Var fn=_·template(html);

//调用template()返回的这个函数fn

//fn接收一个数据对象,并用该数据对象,将html中的模板内容替换,生成最终的HTML 代码

Html=fn({name:达达})

console.log(html);

Console.log(fn.toString());

//fn函数的源代码

Function(data)

{

return render.call(this,data,_);

}

render是一个变量,template内部的一个变量,最终指向一个方法,new·Function是一个声明函数,这个函数的源代码即为source变量里面的源代码,这个源代码是动态生成的。

2.安装underscore

//将用户请求的url和method转换为小写字母

Req.url=req.url.toLowerCase();

Req.method=req.method.toLowerCase();

//通过url模块,调用url.parse()方法解析用户请求的url(req.url)

Var urlobj =url.parse(req.url,true);

//先根据用户请求的路径(路由),将对应的HTML页面显示出来

If (req.url===/||/index&& req.method===get)

{

//读取data.json文件中的数据,并将读取到的数据转换为list数组

fs.resdFile(path.join(_ _ dirname,data ,data.json),utf8,functtion(err,data){

Throw err;

}

Var list= JSON.parse(data||[]);

//2.在服务器端使用模块引擎,将list中的数据和index.html 文件中的内容结合 渲染给客户端

//读取index.html

res,render(path.join(_ _dirname,·viewsindex.html))

)};

3.创建服务

先安装,在index6里面直接加载这个模块。现在渲染同样的内容,先传数据过来,传数据之前找到index.html。用for循环开始小于传过来数据所有的长度,中间的内容循环显示第一条新闻显示1.第二条新闻显示2,输出一个表达式时 ><%= 。先找到新闻的标题,点击到新闻的时候用到List数组,循环时用list数组即可和模板数组区分开来。现在的render函数没有第二个参数,希望render函数渲染,加上第二个参数,调动的时候就可以传一个数据进来,index需要List,传一个对象,对象内有List后续为List赋值。在reder函数里面用这个数据,如果是图片文件或者CSS文件不需要进行替换。读取静态资源文件不会传模板数据,所以在里面进行判断。

http.createServer(function(req.res){

//要在这里写大量的代

//为 res 对象添加一个render函数,方便后续使用

//因为现在要渲染的index.html中要用到模板数据,所以给render函数增加了第二个参数

//第二个参数的作用就是用来传递 html 页面中要使用的模板数据

 res.render = function(filename,tplData)({

fs.readFile(filename,function(err,data){

if(err){

 res.writeHead(404,Not Found,{Content-Type:         text/html ;charsetutf=8});

res.end('404,not found.);

}

//如果用户传递了模板数据,那么就使用underscore的template方法进行替换

//如果用户没有传递模板敷据,那么就不进行替换

if (tplData){

//如果用户传递了模板数据,表示要进行板替换

 var fn=_.template(data.toString('utf8));

data = fn(tplDate);

}

res.setHeader('Content-Type',mime.getType(filename));

res.end(data);

//将用户请求url和method转换为小写字母

req.url = req.url.toLowerCase();

Req.method = req.method.toLowerCase();

//通过ur1模块,调用url.parse()方法解析用户请求的  ur1(req.url)

var urlobj = url.parse(req.url,true);

//先根据用户请求的路径(路由),将对应的HTML页面显示出来

if(req.url === /|| req.url/index&& req.method ===‘get){

//读取data.json文件中的数据,并将读取到的据转换为list数组

fs.readFile(path.join(_dirnamedata,data.json'),'utf8,function(err,data){

1f(err&&err.code !==ENOENT){

throw err;

}

//读取到的新闻数据

var list_news = JSON.parse(deta ||[]');\

//2.在服务器端使用模板引擎,将list中的数据和index.html文件中的内容结合渲染给客户端

res.render(path.join(_dirnameviews,‘index.html'),{lis: list _news});

});

相关文章
|
1天前
|
人工智能 运维 安全
|
4天前
|
SpringCloudAlibaba 负载均衡 Dubbo
微服务架构下Feign和Dubbo的性能大比拼,到底鹿死谁手?
本文对比分析了SpringCloudAlibaba框架下Feign与Dubbo的服务调用性能及差异。Feign基于HTTP协议,使用简单,适合轻量级微服务架构;Dubbo采用RPC通信,性能更优,支持丰富的服务治理功能。通过实际测试,Dubbo在调用性能、负载均衡和服务发现方面表现更出色。两者各有适用场景,可根据项目需求灵活选择。
375 124
微服务架构下Feign和Dubbo的性能大比拼,到底鹿死谁手?
|
6天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
606 107
|
3天前
|
Java 数据库 数据安全/隐私保护
Spring 微服务和多租户:处理多个客户端
本文介绍了如何在 Spring Boot 微服务架构中实现多租户。多租户允许单个应用实例为多个客户提供独立服务,尤其适用于 SaaS 应用。文章探讨了多租户的类型、优势与挑战,并详细说明了如何通过 Spring Boot 的灵活配置实现租户隔离、动态租户管理及数据源路由,同时确保数据安全与系统可扩展性。结合微服务的优势,开发者可以构建高效、可维护的多租户系统。
197 127
|
3天前
|
Web App开发 前端开发 API
在折叠屏应用中,如何处理不同屏幕尺寸和设备类型的样式兼容性?
在折叠屏应用中,如何处理不同屏幕尺寸和设备类型的样式兼容性?
224 124
|
3天前
|
人工智能 数据可视化 测试技术
Coze平台指南(3):核心功能-创建智能体与设计角色
Coze 智能体是由大语言模型驱动,通过提示词设定角色,并借助知识库、插件和工作流扩展能力,以执行特定任务的AI助手。对测试工程师而言,精心设计的智能体可显著提升测试效率与质量,关键是要准确理解测试需求,并将其转化为智能体的角色设定和功能配置。建议进一步学习知识库与工作流,以深化应用。