在 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
?
如果我走得很远,那么进行数据库验证、创建/更新用户字段以及包括用户上传的标准做法是什么?