有一个简单的表单,如下面的js Fiddle http://jsfiddle.net/UdugW/我将一些表单数据发布到我的node.js应用程序(基于sails.js)。这是product
模型中的控制器函数之一:
image_upload: function(req, res) {
if (req.method.toLowerCase() == 'post') {
console.log("request: " + util.inspect(req.body));
if( req.files && req.files.product_image){
fs.readFile(req.files.product_image.path, function (err, data) {
var imageName = req.files.product_image.name;
if(!imageName){
console.log("There was an error with image upload : " + util.index(req.files.product_image));
res.redirect("/product/new_product");
res.end();
} else {
var newPath = UPLOAD_PATH + imageName;
/// write file to uploads/fullsize folder
fs.writeFile(newPath, data, function (err) {
res.writeHead(200, {'content-type': 'text/plain'});
res.end();
return;
});
}
});
}
}else if (req.body) {
console.log("product_name: " + product_name);
console.log("product_price: " + product_price);
console.log("product_description: " + product_description);
res.writeHead(200, {'content-type': 'text/plain'});
res.end();
}
else{
console.log("request err");
res.writeHead(500, {'content-type': 'text/plain'});
res.end();
}
},
当我没有选择要上传的图像时,我遇到了问题,那么我的POST请求就会超时。有什么想法可能会发生吗?
答案 0 :(得分:3)
问题在于:你有这个if语句
if( req.files && req.files.product_image){
但可怜的家伙没有匹配的else语句:-( 所以如果那个条件不正确......好吧,没有任何反应。执行基本上只是结束,浏览器等待......永远。
只需在其中添加一个带有res.end()
的else-statment就可以了。
这样的事情
if( req.files && req.files.product_image){
//all the stuff you already have for when it matches
}else{
console.log("No files were included in the post");
res.end();
}