AngularJS + ExpressJS。代理POST请求正在等待处理

时间:2014-03-27 10:22:53

标签: 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.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");});

出了什么问题?

修改 这是在控制台上看到的请求: enter image description here

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

1 个答案:

答案 0 :(得分:12)

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

https://github.com/mikeal/request

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

request.post('http://service.com/upload', {form:{key:'value'}})

或作为链式电话:

request.post('http://service.com/upload').form({key:'value'})

因为你没有将它作为参数传递,所以request.form()根本没有发出任何请求,等待你调用.form()。但是既然你没有这样做,没有请求发生,所以没有回复,因此你的应用程序看到请求失败而没有响应。您可以在chrome developer tools网络选项卡中看到,请求将显示“(失败)”状态代码。

所以只需从当前请求中获取表单数据并将其传递给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);
});