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



我正试图从AngularJS表单读取数据并将其发送到Express服务器。发送数据的客户机函数确实执行了,但请求从未到达服务器。我认为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服务器的绝对路径。这个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一致?

这里有什么问题?我相信整体结构是可以的,但是路径/url应该是什么?(即,不仅仅是上面例子中的值,还有它们的语义)。在线文档没有说明这一点。)

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

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

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

AngularJS客户:

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

Express server route:

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

我还发现我的Amazon Web Services实例的安全组阻止了端口3000上的传入流量。我的应用程序工作后,我打开这个端口到外面的世界。

只使用'/login',不要使用完整路径

$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

它将创建服务器实例来响应任何post请求。修改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上。这对我有用,希望对你有帮助

最新更新