3

我正在尝试简单的事情。对 node express 进行 ajax 调用并基于它做一些事情。我无法访问 req.body,我的意思是从 node.js 端调试时它是空的

节点侧。我在用:

app.use(express.bodyParser());

这是我在快递中的测试方法:

app.get('/courses', function(request, response) {
  console.log("I have been hit"); //I Am getting here               
});

角边:

eventsApp.factory('MainConnector', function($http, $q, $resource ) {
  return {
    mainConnection: function( ) {

      var requestBody = {
        id: 3,
        name: 'testname',
        lastname: 'testlastname'
      }

      $http.get("http://localhost:3000/courses", requestBody)
        .success(function(data, status, headers, config) {
          console.log("this is coming from wherever:" + data);
          $scope.data = data;
        }).error(function(data, status, headers, config) {
          $scope.status = status;
        });
    }      
  };
});

我正在尝试访问(从节点端)

req.body.name

但是身体总是空的,好像我什么都没送。

4

2 回答 2

4

您的 ExpressJS 测试处理程序实际上没有响应任何数据,这就是为什么您会返回一个空的主体。查看expressjs 站点以获取文档

基本上你想要这样的东西

app.get('/courses', function(request, response) {
  console.log("I have been hit"); //I Am getting here
  response.send('hello world');            
});

其次,您正在尝试使用 get 请求发送数据。如果您查看 angularjs 文档,您会发现$http.get它只需要 1 个参数,即 url。

这意味着您想要的 AngularJS 工厂更像这样:

eventsApp.factory('MainConnector', function($http, $q, $resource ) {
  return {
    mainConnection: function( ) 
      $http.get("http://localhost:3000/courses")
        .success(function(data) {
          console.log("this is coming from wherever:" + data);
        });
    }      
  };
});

但是假设你确实想向服务器发送一些东西,你想要的是一个 POST 请求。这意味着您更新您的快速处理程序以响应 POST 而不是 GET。

app.get('/courses', function(request, response) {
  response.send(request.body);            
});

这是一个简单的“回声”处理程序。它只会将客户端发送给它的任何内容发送回客户端。如果您向它发送“Hello”,它将响应“Hello”。

以及对应的AngularJS服务工厂

eventsApp.factory('MainConnector', function($http, $q, $resource ) {
  return {
    mainConnection: function( )
      var data = {name: "hello"};
      $http.post("http://localhost:3000/courses", data)
        .success(function(data) {
          console.log("this is coming from wherever:" + data);
        });
    }      
  };
});
于 2013-10-30T15:58:47.960 回答
2

事实证明,这是两个问题。是的,使用 GET 和发送有效负载存在此问题。然而,这并没有解决问题。问题出在 CORS 中。这就是我修复它的方法:

var allowCrossDomain = function (req, res, next) {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
    res.header('Access-Control-Allow-Headers', 'content-type, Authorization, Content-Length, X-Requested-With, Origin, Accept');

    if ('OPTIONS' === req.method) {
        res.send(200);
    } else {
        next();
    }
};

app.configure(function () {
    app.set('port', process.env.PORT || 3000);
    app.use(express.bodyParser());
    app.use(express.methodOverride());
    app.use(allowCrossDomain);
    app.use(app.router);   
});
于 2013-10-31T11:29:56.407 回答