开发者学堂课程【Node.js 入门与实战:post 方式提交一条新闻】学习笔记,与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/588/detail/8283
post 方式提交一条新闻
当用户在客户端是用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 list = JSON.parse(data
||
'[]');
// 2.获取用户post 提交的数据
//因为post 提交数据的时候,数据量可能比较大,所以会分多次
进行提交,每次提交一部分数据
//此时要想在服务器中获取用户提交的所有数据,就必须监听
request 事件的data 事件(因为每次浏览器提交一部分数据到浏览器就会触发一次data事件)
//那么,什么时候才表示浏览器把所有数据都提交到服务器了呢?
就是当request对象的end事件被触发的时候。
//监听request的对象的data事件和end事件代码如下:
//声明一个数组,用来保存用户每次提交过来的数据
var array = [];
req.on('data', function (chunk) {
//此处的chunk 参数,就是浏览器本次提交过来的一部分数据// chunk 的数据类型是Buffer ( chunk就是一个Buffer对象)
array .push( chunk);
})
;
//监听request 对象的end事件
//当end事件被触发的时候,表示上所有数据都已经提交完毕了
req.on('end', function () {
//在这个事件中只要把array中的所有数据汇总起来就好了
//把array 中的每个buffer 对象,集合起来转换为一个buffer 对象//title-ffffff&ur
l
=fffff&text=fffff
//
{title: 'fffff', url:
’
fffff', text: 'fffff'}
//
JSON . parse();
var postBody = Buffer . concat (array);
/
/
console . log (postBody) ;
//把获取到的buffer 对象转换为一个字符串
postBody = postBody. toString( 'utf8');
//把post 请求的查询字符串,转换为一个json 对象
postBody = querystring.parse(postBody);
//Console.log(postBody);
//将用户提交的新闻 push 到list中
list.push(postBody);
//将新的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. statusMessage = 'Found';
res . setHeader( 'Location', '/');
res.end();
})
;
});
在服务器端要想获取用户post提交的数据要执行两步,监听两个事件,第一监听request 对象的data事件(当数据量比较大,浏览器会一点一点向服务器上传数据,每次上传过来一部分数据会触发一次 request 对象的 data 事件。
每触发一次表示浏览器提交一次数据。),第二监听request对象的end 事件(end事件触发的时候,表示浏览器把所以数据都提交完。)
汇总的意思:
现在有一个array数据里面 保存了很多的Buffer对象,每个Buffer对象都是用户提交过来的一小部分数据,最后需要把这个数据保持成完整的数据。把array里面多个Buffer对象汇总成一个Buffer对象。
两个参数,第一个参数保存了一堆 Buffer 对象的数组。第二个数数组的长度(可传,可不传)
有一个数据里面保存了很多的小 Buffer 对象,通过 Buffer.concat 把数组传过来,把一堆的小 Buffer 转换成一个大 Buffer。
一直在转,说明有问题。
需要给用户响应。
运行成功
在 nodejs 里面如何把一个用户请求的查询字符串转换为 json对象:用 nodejs 里面内置的
Query String模块。
如何把 title=fffffff&ur
l
ffffff&text=ffffff
转换成json对象。
打开Query String,
Query string.parse(str[,sep[,eq[,options]]])
方法
//1.加载http 模块
var
http = require('http');
var fs = require('fs');
var path = require('path');
var mime = require(
’
mime');
var url = require('url');
var querystring
=
require(
’
querystring');