我正面临着我认为使用ExpressJS使用enctype="multipart/form-data"
表单类型的常见问题。如果没有中间件,req.body
(或bodyParser)不会处理此表单类型,因此我会在null
个请求中为我的字段发送POST
值。我的表单有一个文件上传部分,这就是我使用multipart
并使用multer
和multer-s3
模块处理图像上传到s3存储桶的原因,但不是确定如何使用multer
或其他模块来帮助我将字段值存储到我的Mysql(Sequelize ORM)数据库中。任何人都可以提供关于multer
是否是用于此类表单上传的正确模块的指导,并指出我可以使用某些模块特定方法替换req.body
的文档吗?
我的表单是什么样的
<form action="/app/post/create" method="post" enctype="multipart/form-data">
<label for="discovery">Discovery:</label>
<textarea id="discovery-text-field" name="discovery"></textarea>
</br>
<label for="report-link">Link to Report:</label>
<input type="textarea" name="reportLink">
<br />
<label for="file-attachment">File Attachment:</label>
<input type="file" id="file-input" name="fileUpload[]" multiple>
</form>
路由:
appRoutes.route('app/post/create')
.post(function(req, res){
models.Post.create({
discovery: req.body.discovery,
reportLink: req.body.reportLink,
userId: req.user.userId
}).then(function(){
req.flash('info', 'Post was successfully created.');
res.redirect('/app');
});
});
答案 0 :(得分:0)
我不确定您是否尝试使用AJAX发送数据,但我无法让AJAX以一种让Multer满意的方式正确发送多格式数据。这是我和Express和Multer一起使用的。以下是您可以用来将表单值上传到服务器的一些JQuery。然后,您可以操纵您的值并将它们存储在服务器端。
<script language="JavaScript">
$(document).ready(function () {
$(".submitButton").click(function () {
var values = {
fields: $("#IDs").val()
};
var http = new XMLHttpRequest();
http.open("POST", '/express/route', true);
// stuff into a form
var form = new FormData();
form.append('values', JSON.stringify(values));
// send data to server
http.send(form);
});
});
</script>
服务器端
app.post('/express/route', upload.array(), function (req, res, next) {
console.log(req.body);
}
现在你有了(我称之为单一形式或非多形式)服务器端的值。
我目前使用的是Mongo而不是SQL,因此我可以提供帮助。我确定你可以安装软件包(我会在npmjs.com上搜索sql),这将允许你与SQL接口,但Mongo似乎现在很受NodeJS的欢迎。这是我在构建MEAN堆栈时用于参考的链接:http://www.dotnetcurry.com/nodejs/1032/nodejs-apps-in-visual-studio-mean-stack MEAN stack 如果你有Visual Studio并希望将NPM内置到VS中,也很有用。