当我们在浏览新闻列表页面的时候,想要看感兴趣的新闻内容,需要到详情页面去查看内容。

在之前写好了新闻列表页面,现在需要做列表页面到详情页面的跳转,需要考虑一下问题

1.点击新闻列表某一项跳转到详情页面

2.跳转的页面时候我们想要的页面,每一条新闻需要有一个标记来识别

3.详情页面的页面内容显示

为了解决上面的问题,我们需要给跳转路径加一个id

在新闻列表页面的代码

<p class="index">
<% for(var i=0;i<list.length;i++){%> <h1><a href="item?id=<%= list[i].id%>">标题:<%= list[i].name%></a></h1>
<p>链接:<%= list[i].url%></p>
<p>内容:<%= list[i].text%></p>
<br/>
<% }%>
</p>

代码中橙色字体就是一个简单的跳转实现,通过接受传过来的id来标记每一条新闻,这个id在每次更新list_news数组时加上,代码如下:

else if(req.url.startsWith('/add')&&req.method==='post'){
fs.readFile(path.join(__dirname,'data','data1.json'),'utf8',function(err,data){
//因为第一次访问网站,data1.json文件本身就不存在,所以会有异常
//这种错误,我们不认为是网站出错了,所以不需要抛出异常
if(err&&err.code!=='ENOENT'){
throw err;
}
//如果data没有读取到,则data为空,转换为数组
var list_news=JSON.parse(data||'[]'); var array=[];
req.on('data',function(chunk){
//此处的chunk参数,就是浏览器本次提交过来的一部分数据
//chunk的数据类型是buffer
array.push(chunk); }); //监听request对象的end事件
//当end事件被触发时,数据提交完成
req.on('end',function(){
var postBody=Buffer.concat(array);
postBody=postBody.toString('utf8'); postBody=querystring.parse(postBody); //把新闻添加到list之前,为新闻增加一个id
postBody.id=list_news.length; //将用户的push提交到新闻push到List_news中
list_news.push(postBody);
fs.writeFile(path.join(__dirname,'data','data1.json'),JSON.stringify(list_news),function(err){
if(err){
throw err;
}
console.log('ok');
}); res.statusCode=302;//跳转
res.statusMessage='Found';
res.setHeader('Location','/');
res.end('over');
}); });
}

这样就可以在每次录入新的新闻的时候,得到一个id,但是如果有删除等操作,这里会出现问题,在这里我们先不管这个

我们解决了跳转和新闻标记问题,就要解决详情页面显示内容的问题,代码如下

1.获取当前新闻的id
2.循环list_new中的数据,找到和id相同的数据
3.调用res.render()函数进行模板引擎渲染
}else if(urlObj.pathname==='/item'&&req.method==='get'){

    //1.获取当前新闻的id
//urlObj.querty.id
//2.读取data1.json文件的数据
fs.readFile(path.join(__dirname,'data','data1.json'),'utf8',function(err,data){
//因为第一次访问网站,data1.json文件本身就不存在,所以会有异常
//这种错误,我们不认为是网站出错了,所以不需要抛出异常
if(err&&err.code!=='ENOENT'){ throw err;
}
var model=null;
//如果data没有读取到,则data为空,转换为数组
var list_news=JSON.parse(data||'[]');
//循环list_new中的数据,找到和id相同的数据
for(var i=0;i<list_news.length;i++)
{
//因为list_news[i].id在数组中是数值,urlObj.query.id是字符,所以可以将list_news[i].id转化为字符,虽然可以使用"==",但尽量少用
if(list_news[i].id.toString()===urlObj.query.id)
{
//如果找到了就记录下来
model=list_news[i];
break; }
}
if(model)
{
//3.调用res.render()函数进行模板引擎渲染
res.render(path.join(__dirname,'views','details.html'),{item:model});//这里要传一个叫list的对象
}
else
{
res.end('no found')
} }); }

node——由新闻列表跳转到新闻详情页的更多相关文章

  1. 用js原生加jquery实现下拉跳转至商品详情页,上拉回到商品简介

    在做一个商城的项目时,做到商品详情页的时候需要实现这种下拉跳转到商品详情页加载许多图片,上拉回到商品简介的效果,并且需要用户在滑动时有一种费力的感觉.最初是通过iscroll插件实现的,但这个插件在使 ...

  2. Vue通过id跳转到商品详情页

    首页列表: 在这里我用a标签进行跳转,在vue里面使用<router-link></router-link> <router-link :to="{path:' ...

  3. 桂电在线_微信公众平台开发之-运用angularjs显示学校公告新闻列表和详情页面

    折腾angularjs的感悟 几天折腾,总的来说看了很多博客,要么不是最新的技术文档,要么写得不够完整,因为别人是基于他们的理解写的技术博客代码不一定会贴完整,所以一旦你用的是最新的想要看完整的实例就 ...

  4. 编写利用Fragment创建新闻列表

    编写利用Fragment创建新闻列表 1.创建新闻实体类News,代码如下:   public class News { private String title; private String co ...

  5. node.js评论列表和添加购物车数据库表创建

    2.1:评论列表--发表评论 用户点击新闻列表某一条新闻,看到新闻详细发表评论 -用户输入评论内容 -发表评论 [将用户评论内容保存数据库 xz_comment] 2.2:评论列表--发表评论-开发评 ...

  6. [ssh新闻公布系统三]存储新闻

    一.存储新闻dao方法 在NewsDao.java中新增存储新闻的saveOrupdate方法 public void saveOrupdate(News news){ getSession().sa ...

  7. Django----使用模板系统渲染博客页面、实现列表和详情页的跳转、前后跳转功能

    .模板写法同Flask,可以参考之前的FLask-模板 .将之前的BootStrap静态页面中的数据使用模板写 <!DOCTYPE html> <html lang="en ...

  8. 微信小程序页面列表与详情页跳转的正确姿势

    初学小程序,碰到列表与详情页跳转遇到的问题,记录一下. 一.问题 1个列表页: 1个详情页: 列表页代码: onLoad:异步查询数据并setData 详情页代码: 保存成功后,调用navigateB ...

  9. 微信小程序云开发-云存储-带图片的商品列表携带id跳转至商品详情

    一.商品列表页 1.wxml文件 在view中添加点击事件goToGoodDetail,绑定数据data-id <!-- 添加点击事件goToGoodDetail --> <view ...

随机推荐

  1. BZOJ 1180 / 2843 LCT模板题_双倍经验

    一大早上到机房想先拍一下模板,热热身. 结果....对照着染色敲的 LCT 竟然死活也调不过去(你说我抄都能抄错) 干脆自己重新敲了一遍,10min就敲完了....... 还是要相信自己 Code: ...

  2. Python数据分析--------numpy数据打乱

    一.shuffle函数: import numpy.random def shuffleData(data): np.random.shufflr(data) cols=data.shape[1] X ...

  3. 编写 Node.js Rest API 的 10 个最佳实践

    Node.js 除了用来编写 WEB 应用之外,还可以用来编写 API 服务,我们在本文中会介绍编写 Node.js Rest API 的最佳实践,包括如何命名路由.进行认证和测试等话题,内容摘要如下 ...

  4. FreeBSD的VIM基本配置

    实现的基本功能 中文解决乱码问题 鼠标右键原样粘贴 最后一次编辑文件后,鼠标位置的记忆 if v:lang =~ "utf8$" || v:lang =~ "UTF-8$ ...

  5. Python IO编程-读写文件

    1.1给出规格化得地址字符串,这些字符串是经过转义的能直接在代码里使用的字符串 需要导入os模块 import os >>>os.path.join('user','bin','sp ...

  6. 使用Word2016直接发布博客

    使用Word2016直接发布博客

  7. bat执行bat文件

    目的:在服务器桌面创建一个bat文件执行tomcat下的startup.bat文件,这样就不用每次都去文件夹下找startup.bat文件 桌面bat文件内容: @echo off start D:\ ...

  8. ASPX和Razor

    ASPX ASPX文件是微软的在server端运行的动态网页文件,通过IIS解析运行后能够得到动态页面,是微软推出的一种新的网络编程方法,而不是ASP的简单升级,由于它的编程方法和ASP有非常大的不同 ...

  9. Atom介绍和安装步骤

    Atom是全然基于web技术开发而成的一款编辑器,其底层架构依赖于chromium,google chrome浏览器也是基于此.编辑器的每一个窗体都是本地渲染的web页面,而且其风格与时下流行的sub ...

  10. Android面试题集

    前几天整理了Java面试题集合,今天再来整理下Android相关的面试题集合.假设你希望能得到最新的消息,能够关注https://github.com/closedevice/interview-ab ...