将相同请求中的文件和数据发布到节点服务器

时间:2016-09-11 02:55:22

标签: node.js express html-form-post

我有一个带有两个输入的HTML表单 - 1个文本和1个文件。

<form method="post" action="http://localhost:3000/users">
            <input type="text" name="username" />
            <input type="file" name="file" />
            <button type="submit">Submit</button>
        </form>

现在我将它发布到节点服务器 -

router.post('/users', function(req, res, next){
    req.pipe(req.busboy);
    req.busboy.on('file', function(fieldname, file, filename){
        var fstream=fs.createWriteStream('./uploads/'+filename);
        file.pipe(fstream);
        fstream.on('close', function(){
            var user = User({
                username: req.body.username,
            });
            user.save(function(err){
                if(err)
                    res.json({error: err});
                else
                    res.redirect('/');
            });
        });
    });
});

但我只能获得用户名或文件(当我在HTML表单中使用enctype="multipart/form-data"时)。

有没有办法在单个请求中保存两者。如果是,那么如何?

感谢任何帮助。

感谢。

1 个答案:

答案 0 :(得分:1)

您只是在侦听文件字段。如果您希望收到有关非文件字段的通知,那么您还需要添加'field'事件监听器:

req.busboy.on('field', function(key, val, keyTrunc, valTrunc) {
  console.log(key, val);
});