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

时间:2015-10-16 03:21:59

标签: angularjs node.js express

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

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?

这里有什么问题?我认为整体结构还可以,但路径/网址应该是什么?(即,不仅仅是他们的案例价值以上,但他们的语义。在线文档没有说清楚。)

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

4 个答案:

答案 0 :(得分:2)

答案是所列答案的组合。

  1. 在网址中列出Express服务器的扩展名。
  2. 紧跟 IP地址后,将端口号包含在:3000 中。
  3. AngularJS客户端:

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

    快速服务器路线:

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

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

答案 1 :(得分:1)

只需使用' / 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'}
})




答案 2 :(得分:0)

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

node login.js

这将创建服务器实例以响应任何发布请求。 更改网址

$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'}
});

答案 3 :(得分:0)

尝试使用" params"而不是"数据"在$ http上,如果标题是" application / x-www-form-urlencoded"那么这并不重要。或" application / json"但使用" json"它将捕获" req.query.param1"在NodeJS上。 它对我有用,希望有所帮助