Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用表单文本字段以及节点和连接总线男孩处理用户文件上载?_Javascript_Node.js_Express_Sequelize.js_Busboy - Fatal编程技术网

Javascript 使用表单文本字段以及节点和连接总线男孩处理用户文件上载?

Javascript 使用表单文本字段以及节点和连接总线男孩处理用户文件上载?,javascript,node.js,express,sequelize.js,busboy,Javascript,Node.js,Express,Sequelize.js,Busboy,在Nodejs、sequelize和connect-busboy中处理文件上传和验证文本字段/插入到db的标准做法是什么 例如,如果我们有一个用户配置文件表单,最终用户必须输入姓名、电子邮件并上传几个文件 当用户提交表单时,服务器上的步骤是:(1)验证文本字段(2)保存到数据库中的用户表(3)将文件保存到磁盘(4)使用文件路径更新用户行吗 在半伪代码中,我想象如下: router.post('/formSubmit', function(req, res) { var name = ..

在Nodejs、sequelize和connect-busboy中处理文件上传和验证文本字段/插入到db的标准做法是什么

例如,如果我们有一个用户配置文件表单,最终用户必须输入姓名、电子邮件并上传几个文件

当用户提交表单时,服务器上的步骤是:(1)验证文本字段(2)保存到数据库中的用户表(3)将文件保存到磁盘(4)使用文件路径更新用户行吗

在半伪代码中,我想象如下:

router.post('/formSubmit', function(req, res) {
    var name = ....;
    var email = ...;
    var files = [];

    // Sequelize will validate for us when creating a new row in User table
    User.create({ name: name, email: email}).success(function(user_row) {

        // save each files to disk
        ...

        // update user_row with the filepaths on disk.
        ...
    });
});
但是,我不确定如何将此逻辑流适配到
connect busboy

router.post('/formSubmit', busboy, function(req, res) {
    if (req.busboy) {
        busboy.on('file', function(fieldname, file, filename, encoding, mimetype) {
          var saveTo = path.join(os.tmpDir(), path.basename(fieldname));
          file.pipe(fs.createWriteStream(saveTo));
        });
        busboy.on('field', function(key, value, keyTruncated, valueTruncated) {
            // ...
        });
        busboy.on('finish', function() {
          res.writeHead(200, { 'Connection': 'close' });
          res.end("That's all folks!");
        });
        return req.pipe(busboy);
    }
    res.writeHead(404);
    res.end();
});
我的想法对吗?如果是这样,我如何将验证、用户创建/更新调整为
connect busboy


如果我还不知道,进行数据库验证、创建/更新用户字段以及包括用户上传的标准做法是什么?

如果在处理文件之前需要验证其他字段,请确保这些其他字段位于表单提交中的文件字段之前。这些非文件字段将作为
字段
事件发出。@mscdex如果字段逐个发出,我如何知道何时在数据库中创建/更新用户行?ie,似乎我不能这样做
User.create({name:name,email:email})
如果我事先不知道所有字段的话?就等着收集所有的值吧?您可以将它们放在一个对象中或使用单独的变量。如果首先看到文件字段或
finish
事件,则用户没有提交所有必需的值。在这种情况下,只需使用适当的HTTP状态代码进行响应。如果有人遇到此问题,这里有一个要点,基本上可以上载多个文件并进行一些检查(即大小、mimetype等)