node.js - AngularJS + ExpressJS。代理 POST 请求待处理

标签 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

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

最佳答案

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

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 开发者工具网络选项卡中看到,请求将显示“(失败)”状态代码。

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

关于node.js - AngularJS + ExpressJS。代理 POST 请求待处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22684644/

相关文章:

javascript - Angular 中的 Firebase Auth 服务 - 数据不适用于所有 Controller

javascript - 如何使用 firebase simple login for facebook 处理用户信息

javascript - 当我们已经有了 Express 服务器时,为什么要为 Socket.io 创建新的 http 实例?

node.js - 在 Mongoose 模型和快速路线上运行 Mocha 测试时超时

mysql - 从表执行查询并根据结果执行另一个查询?

node.js - 如何修复 Vercel 的 NestJS 部署错误?

node.js - 在node.js中使用socket.io共享用于协作工作的url

javascript - 如何在使用 webpack 编译期间将文件文本导入到 javascript 中的变量中?

javascript - angularjs 中的客户端验证

node.js - 两个回调可以同时(并行)执行代码吗?