Node/Express不响应POST请求

3

我有一个AngularJS前端,与Node/Express/MySQL后端通信,除了POST请求外,所有请求都正常工作。这是我的Angular代码:

var Data = $resource('http://127.0.0.1:9001/api/data_user');
var newData = new Data({'data_id': data_id});
newData.test = 'whatever';
newData.$save(function (data) {
  console.log(data);
});

我已经按照通常的调试步骤,将所有代码删除直到找到问题所在。但是即使这样也没有起作用(来自客户端):

app.post('/api/:table', function (req, res) {
  res.send(200);
});

我之前在那里有一个MySQL更新语句,它被正确执行(带错误检查等),但前端正在等待响应:

(Chrome Dev 工具): data_user /api POST (等待) 待定

令人讨厌的是,使用 CURL 没有问题:

$ curl -i -X POST http://127.0.0.1:9001/api/data_user --data '{}' -H "Content-Type: application/json"
HTTP/1.1 200 OK
X-Powered-By: Express
Content-Type: text/plain
Content-Length: 2
Date: Mon, 31 Mar 2014 09:54:21 GMT
Connection: keep-alive

有人有任何想法吗?如果需要,可以发布更多代码。

你的 JavaScript 代码中,var Data = $resource('http://127.0.0.1:9001/api/data_user); 是否也缺少了一个冒号? - wayne
不,那是我的错,复制和粘贴错误了。我在应用程序中通过编程方式访问表格,例如:var Data = $resource('http://127.0.0.1:9001/api/data_' + table);但前端和后端都没有JavaScript错误。 - welale
所以我假设在你的开发工具中,你看到了一个POST请求到http://127.0.0.1:9001/api/data_user。也许你可以添加通配符app.post('*')来捕获所有请求并打印一些有用的跟踪信息。 - wayne
我知道我正在访问/api/:table调用,因为使用断点,我正在回显req和resp对象,但它们看起来很好 - 我可以添加状态码等,当然CURL相同的对象也没问题。 - welale
也许尝试使用res.json()而不是res.send()?也许Angular对于HTML头部接受的内容比较挑剔?或者在Node中设置内容类型...?http://expressjs.com/3x/api.html#res.json - AlexMA
1个回答

2
您是否将页面视为 127.0.0.1 或本地主机?您可能会遇到 CORS CORS。如果您将页面视为“localhost”但将其发布到 127.0.0.1,则可以解释为什么 cURL 可以工作,但来自您的页面的 POST 请求无法工作。

3
这个问题不可避免地涉及到了CORS。我本应该提到我在两个端口上运行了两个服务器,但我不想提那该死的CORS,因为我认为我已经在代码的14个不同位置适当地处理了它。结果证明我错了。代码永远都是正确的,是程序员出了问题...现在已经修复了,谢谢! - welale

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接