2016-01-08 45 views
0

我正在使用Angular与Node,Express和Multer以及ng-file-upload。由于某种原因,我得到400(错误请求)http请求错误。我尝试了不同的东西,但这一切都回来了。这是代码示例。如何让ng-file-upload与Node一起使用?

HTML

<form ng-controller="adminController" name="form"> 

与验证单张图像 选择

提交

角app.js

$scope.submit = function() { 
    $log.info($scope.file); 


    if ( $scope.file) { 
    $scope.upload($scope.file); 

    } 
}; 



// upload on file select or drop 
$scope.upload = function (file) { 
    Upload.upload({ 
     url: '/api/admin/photos', 
     headers : { 
     'Content-Type': 'multipart/form-data' 
     }, 

     data: {file: file} 
    }).then(function (resp) { 
     console.log('Success ' + resp.config.data.file.name + 'uploaded. Response: ' + resp.data); 
    }, function (resp) { 
     console.log('Error status: ' + resp.status); 
    }, function (evt) { 
     var progressPercentage = parseInt(100.0 * evt.loaded/evt.total); 
     console.log('progress: ' + progressPercentage + '% ' + evt.config.data.file.name); 
    }); 
}; 

节点JS

//upload photos 
apiRoutes.post('/admin/photos',upload.single(),function(req,res){ 
    console.log(req); 
    res.json({name: 'this works'}); 
}); 

回答

0

upload.single()应改为upload.single('file'),因为这是您用于上传的属性名称。另外,明确地设定:

headers : { 
    'Content-Type': 'multipart/form-data' 
} 

是不必要的。

如果仍然不起作用,您应该暂时删除upload.single('file')并确保您的路由处理程序已开始(并且某些以前的中间件/路由处理程序未拦截它)。

+0

好的,我做过这件事,但仍然没有运气...甚至在此之前,尝试了其他的东西,而不是Muller和相同的结果。所以我只是从那里删除upload.single和相同的结果。我如何测试以查看正在采摘的内容? – arsenalist

+0

最快的方法可能是下列之一:1.查找将状态码设置为400的行; 2.开始消除中间件直到执行路由处理程序; 3.插入一个新的中间件,仅仅将某些东西记录到控制台,并通过执行(通过'next()')并继续向上移动链,直到看到它登录到控制台。 – mscdex

+0

确实很棒。它似乎是bodyparser.urlencoded。这应该是用于别的东西,现在我必须弄清楚为什么会导致问题。感谢您的帮助。 – arsenalist