我怀疑下面场景中的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);
答案 0 :(得分:0)
我已经完成了关于form.parse的github中提到的规范。 这里form.parse正在采用默认的回调函数。
我们可以根据我们的要求覆盖调用函数,然后我们就可以访问所有表单字段和文件。
请参阅下面提到的链接以获取详细说明。
答案 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;
}