Node.js AngularJS+;ExpressJS。代理POST请求挂起

Node.js AngularJS+;ExpressJS。代理POST请求挂起,node.js,angularjs,express,proxy,request,Node.js,Angularjs,Express,Proxy,Request,使用AngularJS+Express 我有以下代码将我的请求代理到远程服务: app.get('/api.json', function (req, res) { req.pipe(request("http://test-api.com/api.json")).pipe(res); }); app.post('/api.json', function (req, res) { req.pipe(request.post("http://test-api.com/api.js

使用AngularJS+Express 我有以下代码将我的请求代理到远程服务:

app.get('/api.json', function (req, res) {
    req.pipe(request("http://test-api.com/api.json")).pipe(res);
});

app.post('/api.json', function (req, res) {
    req.pipe(request.post("http://test-api.com/api.json")).pipe(res);
});
所有GET请求都可以正常工作,但是POST请求在我的浏览器中处于挂起状态

以下是我的发帖方式:

$http({
   method: 'POST',
   url: '/api.json',
   data: $.param({
       "title": not.title,
       "desc": not.description
  }),  // pass in data as strings
   headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
}).success(function () {alert("Success");});
怎么了

编辑: 以下是控制台上显示的请求:


我应该检查什么来提供更多信息?

您应该提到您正在使用请求库:

request.post()希望表单作为第二个参数:

request.post('http://service.com/upload', {form:{key:'value'}})
或作为链接调用:

request.post('http://service.com/upload').form({key:'value'})
因为您没有将其作为参数传递,所以request.form()根本没有发出任何请求,等待您调用.form()。但由于您也没有这样做,不会发生任何请求,因此不会返回任何答案,因此您的应用程序会看到请求在没有响应的情况下失败。您可以在chrome开发者工具网络选项卡中看到,请求将显示一个“(失败)”状态代码

因此,只需从当前请求中获取表单数据并将其传递给request.form,它就可以工作了

作为将来的参考,调试器会立即告诉您错误所在。我推荐Webstorm附带的调试器,但可以随意使用任何调试器

编辑:我还没试过,但这是我会尝试的

app.post('/api.json', function (req, res) {
    req.pipe(request.post("http://test-api.com/api.json", {form:req.body})).pipe(res);
});

URL不匹配:客户端发布到
/notifications.json
,而服务器代码处理
/api.json
只是一个输入错误。。。eidted如果它处于挂起状态,则指向
request.post
的管道不会返回任何内容,或者永远无法到达。如果流从未恢复,响应将永远不会写入
res
感谢您的回复,但是当我从客户端(通过表单)直接发布到API时,我会立即得到响应有新想法吗?我迷路了:(我想我爱你!谢谢你的帮助,赏金是当之无愧的!我也爱你,我不是每天都能得到500个代表赏金;)我就要放弃了。很高兴我找到了这个答案。应该注意的是,如果您发布的是JSON数据,那么您应该将
{form:req.body}
替换为
{JSON:req.body}
@roberkules谢谢您的提示。。。。。{json:req.body}把我从一个让我发疯的问题中解救出来。