form.parse()方法的工作原理是什么?

时间:2018-05-15 09:46:00

标签: node.js formidable

我怀疑下面场景中的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);

2 个答案:

答案 0 :(得分:0)

我已经完成了关于form.parse的github中提到的规范。 这里form.parse正在采用默认的回调函数。

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

请参阅下面提到的链接以获取详细说明。

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

答案 1 :(得分:0)

第一个参数“ err”处理错误 第二个参数“字段”处理表单中的所有字段 第三个参数“文件”处理以以下格式提交的文件

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;
           }