You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
if(global.GENTLY)require=GENTLY.hijack(require);// This is a buffering parser, not quite as nice as the multipart one.// If I find time I'll rewrite this to be fully streaming as wellvarquerystring=require('querystring');functionQuerystringParser(maxKeys){this.maxKeys=maxKeys;this.buffer='';}exports.QuerystringParser=QuerystringParser;QuerystringParser.prototype.write=function(buffer){this.buffer+=buffer.toString('ascii');returnbuffer.length;};QuerystringParser.prototype.end=function(){varfields=querystring.parse(this.buffer,'&','=',{maxKeys: this.maxKeys});for(varfieldinfields){this.onField(field,fields[field]);}this.buffer='';this.onEnd();};
node-formiable分析
代码分类
lib/file.js 文件上传
lib/incoming_form.js 分层
lib/index.js 入口文件
lib/json_parser.js 处理json
lib/multipart_parser.js 处理 multipart 表单
lib/octet_parser.js 处理未分类的二进制
lib/querystring_parser.js 处理 querystring
incoming_form.js
这个文件是主要的逻辑文件,用来注册各个parser的回调处理和各种类型数据的处理。
可以看到主要处理了四种格式的数据,对于这四种数据有四种parser。
lib/json_parser.js 处理json
lib/multipart_parser.js 处理 multipart 表单
lib/octet_parser.js 处理未分类的二进制
lib/querystring_parser.js 处理 querystring
json_parser.js
json_parser的主要逻辑 JSON.parse(Buffer.concat(this.chunks)),this.onField()是注册进来的。
octet_parser.js
只是 this.emit('data', buffer);
querystring_parser.js
主要的逻辑 querystring.parse(this.buffer, '&', '=', { maxKeys: this.maxKeys }),
然后触发从外部注册的 this.onField()
multipart_parser.js
multipart_parser.js的逻辑比较复杂,就是遍历每个传进来的字符,记录不同的状态,分割数据,写入流,自行观看源码。
主要的流程逻辑。
这个库的源码还是不错的,依赖很少,学到一些http协议,node的req和流相关的一些知识,挖个坑,改天自己写一个formiable。😁
The text was updated successfully, but these errors were encountered: