从AngularJS客户端发送POST表单数据到Express / Node.js服务器

我正在尝试从AngularJS窗体读取数据并将其发送到Express服务器。 我的客户端function发送数据确实执行,但请求永远不会到达服务器。 我相信url存在问题。

我的AngularJS控制器的相关部分:

$scope.loginUser = function() { $scope.statusMsg = 'Sending data to server...'; $http({ url: 'http://##.##.##.##/login.js', // IP address replaced with ##'s method: 'POST', data: user, headers: {'Content-Type': 'application/json'} }) 

确实执行,因为我看到消息从第一行显示。 url是我的Express服务器的绝对path。 这个URL应该是什么? (是否需要指向一些现有的文件?)

我的Express服务器 (相同目录下的login.js )的相关部分:

 var express = require("express"); var bodyParser = require("body-parser"); var app = express(); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); app.post('*', function(req, res) { console.log('Processing request...'); res.sendFile('/success.html'); }); app.listen(3000); 

我执行这个服务器,它应该监听端口3000。 但是当我的客户端执行时,上面的app.post方法永远不会运行,因为我从来没有在控制台上看到Processing request...输出。 这里的路是什么? 是否需要同意客户端的URL?

这里有什么问题? 我相信整体结构是可以的,但path/url应该是什么? (也就是说,不仅仅是他们对上述情况的价值观,而是他们的语义。在线文档没有说清楚。)

如果有帮助,我的HTML表单使用method="post"并没有指定任何action 。 我已经调整了这些和许多其他设置没有运气。

答案是列出的答案的组合。

  1. 不要在URL中列出Express服务器的扩展名。
  2. 包括端口号为:3000 紧跟在IP地址后的:3000

AngularJS客户端:

 url: 'http://##.##.##.##:3000/login' 

Express服务器路由:

  app.post('/login', function(req, res) { console.log('Processing request...'); res.sendFile('/success.html'); }); 

我还发现,我的Amazon Web Services实例的安全组阻止了端口3000上的传入通信。我的应用程序工作后,我打开此端口的外部世界。

只要使用'/ login'就不要使用完整path

 $scope.loginUser = function() { $scope.statusMsg = 'Sending data to server...'; $http({ url: '/login', // No need of IP address method: 'POST', data: user, headers: {'Content-Type': 'application/json'} }) 

如果我们在你的login.js文件中看到代码,那么它清楚地显示它将从控制台运行。

node login.js

这将创build服务器实例来响应任何发布请求。 更改url

 $scope.loginUser = function() { $scope.statusMsg = 'Sending data to server...'; $http({ url: 'http://##.##.##.##:3000', //Your url will be like this. method: 'POST', data: user, headers: {'Content-Type': 'application/json'} }); 

尝试在$ http上使用“params”而不是“data”,如果头文件是“application / x-www-form-urlencoded”或者“application / json”,但是使用“json”则会捕获“req”。 query.param1“在NodeJS上。 它从我的工作,希望它有帮助