get 方式提交新闻防止新闻被覆盖掉|学习笔记

简介: 快速学习 get 方式提交新闻防止新闻被覆盖掉

开发者学堂课程【Node.js 入门与实战get方式提交新闻防止新闻被覆盖掉】学习笔记,与课程紧密联系,让用户快速学习知识

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


get方式提交新闻防止新闻被覆盖掉

get方式提交新闻防止新闻被覆盖掉

1. 代码如下:

//封装一个render()函数

//将 render函数挂在到res对象上,可以通过res.render()来访问

//实现 get方式添加新闻

//-实现在原来list数组的基础上追加新闻,而不是覆盖

//1.加载 http模块

var http = require( 'http');

var fs = require( 'fs');

var path = require( " path');

var mime = require( " mime ' );

var url = require("url');

// 2.创建服务

http.createServer(function (req,res){

//要在这里写大量的代码

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

res.render = function (filename) {

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

if (err){

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

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

return;

}

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

res.end(data);

});

};

//设计路由

//当用户请求/或/index时,显示新闻列表-get请求

//当用户请求/item时,显示新闻详情- get请求

//当用户请求/submit 时,显示添加新闻页面- get请求

//当用户请求/add时,将用户提交的新闻保存到data.json 文件中- get 请求

//当用户请求/add 时,将用户提交的新闻保存到 data. json 文件中- post 请求//将用户请求的 url 和 method 转换为小写字母

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

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

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

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

// console. log(ur10bj);

// url0bj.query.title

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

if (req.url === '/' 1 req.url == ' /index' && req. method === ' get') {

//读取 index. html

res . render(path. join(__ dirname, 'views' ,' index.html'));

} else if (req.url === ' /submit' && req . method === 'get') {

//读取 submit.html 并返回

res . render( path.join(__ dirname, 'views', ' submit.html'));

} else if (req.url == ' /item' && req. method === ' get' ) {

//读取 details.html 并返回

res. render(path. join(__ dirname, 'views', ' details.html'));

} else if (req .url.startsWith( /add') && req . method === 'get') {

//1.1读取 data.json 文件中的数据,并将的u渠道的数据文件转换为一个数组

//此处,读取文件的时候可以直接写一个utf8 编码,这样的话,回调函数中的data 就是一个字符串了

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

//因为第一次访问网站, data.json 文件本身就不存在,所以肯定是有错误的

//但是这种错误,我们并不认为是网站出错了,所以不需要抛出异常

if (err && err.code !== ' ENOENT') {

throw err;

}

//如果读取到数据了,那么就把读取到的数据data, 转换为list数组

//如果没有读取到数据,那么就把'[]' 转换为数组

var list = JSON.parse(data 11 '[]');

});

list. push(url0bi. query);

// 2.把用户提交的新闻数据保存到data. json 文件中

//把list数组中的数据写入到data.json 文件中

fs .writeFile(path. join(__ dirname, 'data', 'data . json'), JSON. stringify(list),function (err) {

if (err) {

throw err;

}

console.log('ok' );

// 设置响应报文头,通过响应报文头告诉浏览器,执行一次页面跳转操作

//3.跳转到新闻列表页

//重定向

res . statusCode = 302 ;

res.statusCode = ‘Found’;

res.setHeader(‘Location’,’/’);

res.end();

});

});

}else if (req.url === ' /add' 8& req . method === 'post') {

//表示post方法提交一条新闻

}else if (req. url. startswi th(' /resources') && req . method === 'get') {

//如果用户请求是以/resources 开头,并且是get 请求,就认为用户是要请求静态资源

//resources/images/s.gif

res. render(path. join(__ dirname, req .ur1));

} else {

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

res.end(‘404,Page Not Found.’);

}

}).listen(9090,function(){

Console.log(‘http://localhost:9090’);

});

2.代码解说:

当用户通过get方法提交过来一条数据的时候,我们首先第一步要读取原有文件中的数据,然后转成list数组。

3.执行代码如下:

C: Users\Humble\Desktop\12期\e3-HackerNers\02-理代码\课堂代码\01-hackernews(05-hackernews91.0.0)

入node index4.js

http://localhost :9090

浏览器中访问结果:

image.png

点击submit提交跳转出现重定向提交到首页的结果查看页面(也可搜索json格式化查看):

image.png

相关文章
|
6月前
织梦dedecms会员发布文章内容自动过滤外部链接的方法
织梦会员中心发布文章自动过滤外部外部链接,保留本站站内链接。这个织梦默认后台本身带有这样的功能的,只是会员模块里没有而已。
|
7月前
|
移动开发
微信h5扫码接口范例:多个扫码框支持的办法,通过引入一个参数来区分及使用localStorage保证之前扫到的数据不丢失
微信h5扫码接口范例:多个扫码框支持的办法,通过引入一个参数来区分及使用localStorage保证之前扫到的数据不丢失
61 0
|
8月前
|
存储 搜索推荐 NoSQL
抖音是怎么做到不重复推荐内容呢?
抖音是怎么做到不重复推荐内容呢?
|
数据采集 自然语言处理 文字识别
淘宝视频内容标签的结构化分析和管理
淘宝视频是如何分类的?又是如何保持不同类别视频样本得到相对均衡?又是如何应用的?
淘宝视频内容标签的结构化分析和管理
|
JavaScript 开发者
get方式提交新闻防止新闻被覆盖掉(补充说明)|学习笔记
快速学习 get 方式提交新闻防止新闻被覆盖掉(补充说明)
90 0
get方式提交新闻防止新闻被覆盖掉(补充说明)|学习笔记
|
Java Maven 开发者
搜索 会员中心 收藏 动态 消息 创作
1、本地仓库 本地仓库就是开发者本地已经下载下来的或者自己打包所有jar包的依赖仓库,本地仓库路径配置在maven对应的conf/settings.xml配置文件。
 搜索  会员中心  收藏 动态 消息 创作
|
中间件 关系型数据库 MySQL
记一次保留订单历史记录的方案讨论
记一次保留订单历史记录的方案讨论
223 0
|
存储 安全 搜索推荐
推给我的广告都跟我最近看的内容有关系,怎么做到的?
互联网的商业模式,商业化变现不外乎后向收费的广告模式,以及面向最终消费者的前向收费模式。广告尤其是重头。就连淘宝天猫的模式本质上也是赚的广告的钱。那么,大数据在广告中是如何起作用的?
关闭“通过手机号搜索”依然能被找到?微博:Bug背锅
3月13日,有微博网友称新浪微博出现Bug,即使关闭“通过手机号搜索”选项依然能被找到。
704 0