【问题标题】:Sending POST form data from AngularJS client to Express/Node.js server将 POST 表单数据从 AngularJS 客户端发送到 Express/Node.js 服务器
【发布时间】:2016-08-19 09:00:31
【问题描述】:

我正在尝试从 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。我已经调整了这些设置和许多其他设置,但都没有运气。

【问题讨论】:

    标签: angularjs node.js express


    【解决方案1】:

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

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

    AngularJS 客户端:

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

    快速服务器路由:

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

    我还发现我的 Amazon Web Services 实例的安全组正在阻止端口 3000 上的传入流量。我的应用程序在我向外界开放此端口后工作。

    【讨论】:

      【解决方案2】:

      只使用 '/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的整个code,所以服务器永远不会处理请求.我只是想将数据发送到服务器并让它对这些数据进行操作。你知道怎么做吗?
      【解决方案3】:

      如果我们在您的 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'}
      });
      

      【讨论】:

      • 还是不行。如果我包含端口,它会超时,即使nmap 显示端口 3000 是打开的。在不指定端口的情况下,返回给客户端的数据是服务器login.jscode,所以服务器永远不会收到请求。为什么 POST 请求不通过端口 3000 到达服务器?我正在使用 Firefox 的 RESTClient 进行测试,但没有得到任何响应。
      • 我可能发现了问题所在。在同一台服务器上使用nmap 会显示端口 3000 已打开,但从另一台机器上该端口未列出。那么如何才能让这个端口对外开放呢?我的 Express 服务器正在侦听此端口。
      【解决方案4】:

      尝试在 $http 上使用“params”而不是“data”,无论标头是“application/x-www-form-urlencoded”还是“application/json”,但使用“json”它会捕获NodeJS 上的“req.query.param1”。 对我有用,希望对你有帮助

      【讨论】:

        猜你喜欢
        • 2015-07-09
        • 2016-12-12
        • 2023-03-08
        • 2015-11-21
        • 1970-01-01
        • 2013-04-11
        • 2021-12-07
        • 1970-01-01
        • 2016-06-17
        相关资源
        最近更新 更多