~~~
//加载querystring模块
var querystring =require('querystring');
else if(req.url==='/add'&&req.method==='post'){
//表示post方法提交一条新闻
//1.读取data.json文件中的数据
fs.readFile(path.join(__dirname,'data','data.json'),'utf8',function(err,data){
if(err && err.code !=="ENOENT"){
throw err;
}
var arr=JSON.parse(data || '[]');
//2.获取用户 post 提交的数据
//post提交数据的时候数据量比较大,所以会分多次提交,每次提交一部分数据,此时要想在服务器中获取用户提交的所有数据,必须监听request事件的data事件
//当request对象的end事件被触发的时候表示浏览器把所有的数据都提交到服务器了
//监听request的对象的data事件和end事件代码如下:
//声明一个数组,用来保存用户每次提交过来的数据
var list=[];
req.on('data',function(chunk){
//此处的 春款参数,就是浏览器本次提交过来的一部分数据
//chunk的数据类型是buffer
list.push(chunk);
});
req.on('end',function(){
//在这个事件中只要把array中的所有数据汇总起来就好了
//把list的每个buffer对象,集合起来转换为一个buffer对象
//title=vvvvv&url=http%3A%2F%2Flocalhost%3A8888%2Fsubmit&text=vvvvvvvvvvvv
var postBody=Buffer.concat(list);
postBody=postBody.toString('utf8');//buffer对象转化为字符串
//把post请求的查询字符串,转换为一个json对象
postBody=querystring.parse(postBody);
//console.log(postBody);
//将用户提交的新闻push到arr数组中
arr.push(postBody);
//将新的arr数组,在写入到data.json文件中
fs.writeFile(path.join(__dirname,'data','data.json'),JSON.stringify(arr),function(err){
if(err){
throw err;
}
console.log('ok');
//3.跳转到新闻列表页
res.writeHead(302,'Found',{'Location':'/'})
res.end();
});
});
});
//2.将读取到的数据转化为arr数组
//3.向arr数组中push一条新闻数据
//4.把arr数组转换为字符串重新写入data.json文件中
//5.重定向
}
~~~

- node.js
- 第一章 node.js介绍
- 第二章 node.js安装和配置
- 第三章 node.js开发网站和传统php等开发网站的区别
- 第四章 REPL介绍
- 第五章 创建javascript文件编写程序
- 第六章 写入文件操作
- 第七章 异步操作
- 1.try-catch
- 第八章 读取文件
- 第九章 __dirname和__filename获取正在执行的js文件的路径
- 第十章 通过path模块进行路径拼接
- 10.1 作业:创建文件夹
- 第十一章 编写http服务程序
- 1.通过服务器端设置响应报文头解决乱码问题
- 2.通过设置http响应报文头来解决浏览器显示html问题
- 3.根据不同请求做出不同响应
- 4.根据用户不同请求-读取不同的html文件响应
- 5.根据用户不同请求,返回不同html文件(带图片)
- 6.根据用户不同请求,返回不同html文件(带css)
- 7.模拟apache
- 第十二章 请求url就是一个标示符
- 第十三章 request和response对象介绍
- 13-1 request对象
- 13-2 response对象
- 第十四章 npm介绍
- node.js进阶
- 1.Modules和Packages区别
- 2.package.json文件介绍
- 3.package-lock.json文件介绍
- 4.HackerNews项目
- 4.1 搭建代码结构
- 4.2 根据不同路由响应不同的html页面
- 4.3 封装render函数
- 4.4 render函数挂载到res上
- 4.5 获取用户get提交的数据
- 4.6 将用户提交的数据写入到data.json文件中
- 4.7 浏览器重跳转
- 4.8 get方式提交数据被覆盖
- 4.9 post方式请求提交
- 4.10 underscore
- 4.11 显示从submit添加进来的数据
- 4.12 添加新闻时增加一个id属性
- 4.13 显示新闻详情
- 4.14 封装读取data.json文件的方法
- 4.15 封装写入data.json文件的方法
- 4.16 封装获取用户post提交的数据的方法
- 4.17 总结:使用封装的函数改造原来的代码
- 0.项目地址
- 5. require加载机制
- 5-1 node.js中模块的分类
- 5-2 require函数加载模块原理
- 6. CommonJS规范
- 7.module.exports
- 8. exports和module.exports的区别
- 9. HackerNews项目优化
- 9-1 模块化思路
- 9-2 封装context.js模块
- 9-3 提取router.js模块
- 9-4 提取handler.js模块(handler.index方法封装)
- 9-4 提取router.js模块02(顺带封装handler.js模块中的方法)
- 9-5 模块化后代码执行顺序
- 9-6 封装config.js模块
- node.js2
- 1. buffer类型介绍
- 2. express框架
- 2.1 expres实现hello world
- 2.2 res.send()和res.end()的区别
- 2.3 app.get和app.use注册路由的区别
- 2.4 app.all()注册路由
- 2.5 通过正则表达式注册路由
- 2.6 通过req.params获取路由中的参数
- 2.7 通过express模拟Apache实现静态资源托管服务
- 2.8 res对象的常见方法
- 3.基于express的hackernews项目
- 3.1 封装路由模块
- 3.2 封装handler.js模块
- 3.3 res.sendFile和res.render
- 3.4 ejs模板引擎使用
