form.parse() 方法如何工作?

How form.parse() method works?

我对以下场景中的 form.parse() 的工作原理有疑问。 form.parse() 中的字段和文件是什么意思。我有点不明白模块到底有多强大。

  http.createServer(function (req, res){

        if (req.url == '/fileupload'){
            var form = new formidable.IncomingForm();
            form.parse(req, function(err,fields,files)) // doubt on how this parsing works 
        }
        res.writeHead(200,{'content-Type': 'text/html'});
        res.write('<form action="fileupload" method="post" enctype="multipart/form-data">');
        res.write('<input type="file" name="fileupload"><br>');
        res.write('<input type="submit"');
        res.write('</form>');

    }).listen(8080);

我已经阅读了 github 中提到的关于 form.parse 的规范。 这里form.parse是采用默认的回调函数

我们可以根据需要覆盖调用函数,然后我们就可以访问我们所有的表单字段和文件。

请参考下面提到的link以获得详细解释。

请参考:https://github.com/felixge/node-formidable

第一个参数"err"处理错误 第二个参数"fields" 处理一个表单中的所有字段 第三个参数"files"处理表单提交的文件

let form =  new formidable.IncomingForm();
       form.keepExtensions = true;
       form.parse(req, (err, fields, files) => {
           if(err){
               return res.status(400).json({
                   error: "Image could not upload"
               })
           }

//we are passing the form's fields that the user had submitted to a new 
//object in the line below
           const {title, body, cateogories, tag} = fields;

           let blog      = new Blog();
           blog.title    = title;
           blog.body     = body;
           blog.slug     = slugify(title).toLowerCase();
           blog.mtitle   = `${title} | ${process.env.APP_NAME}`;
           blog.mdesc    = stripHtml(body.substring(0, 160));
           blog.postedBy = req.user._id;


//now here we handle the file that user uploaded
           if(files.photo){
               if(files.photo.size > 10000000){
                    return res.status(400).json({error: "Image could not upload > 1MB "}) 
               }

               blog.photo.data = fs.readFileSync(files.photo.path);
               blog.photo.contentType = files.photo.type;
           }