从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
。 我已经调整了这些和许多其他设置没有运气。
答案是列出的答案的组合。
- 不要在URL中列出Express服务器的扩展名。
- 包括端口号为
: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上。 它从我的工作,希望它有帮助