无头Drupal通过RESTful服务创建内容

时间:2017-03-19 08:47:37

标签: angularjs rest drupal-7

我是AngularJS的新手,我的任务是使用它来创建Headless Drupal界面。

我遇到了以下错误的问题:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
The number of request header fields exceeds this server's limit.</p>
<hr>
<address>Apache/2.4.7 (Ubuntu) Server at 127.0.0.1 Port 80</address>
</body></html>

以下是我使用的代码:

//test function
$scope.test = function() {
  console.log("NODE Test function responding!");
  var user_session = $cookieStore.get('user_session');
  console.log(user_session);

  var nodeObj = {
    "title": "Node Test",
    "body": "Node body contents test#2",
    "type": "page"
  };
  var nodeObj = {
    "type": "page",
    "title": "New Page",
    "language": "und"
  };

  var res = $http.post("http://mydrupal-services-site/angularjs-headless/api/v1/node", nodeObj, {
    "headers": user_session
  });
  res.success(function(data, status, headers, config) {
    $scope.message = data;
    console.log("Success: ");
    console.log(data);
  });
  res.error(function(data, status, headers, config) {
    console.error(data);
  });
}

搜索之后,我发现了一条帖子,建议在我的VirtualHost中添加LimitRequestFieldSize 16384可以解决问题,但事实并非如此。

更新

我的 user_session 变量包含以下内容(长度仅为144个字符):

Cookie:SESSb22b2ff3837c37411e0b1da3fbd77b0c=_bwpgljhXPwcA_ZfmZpL2IrnIvo25PX_APYdzrIcM08 X-CSRF-Token:GwXcAwctxVcOi_FvI-Mfm6HYQaLoWAFnvkQQ-Nnzbhs

1 个答案:

答案 0 :(得分:0)

  

请求标头字段的数量超出了此服务器的限制。

默认情况下,您可以在标头中发送最大8K​​B(apache2)。这样,{"headers": user_session}要在标题中发送很长时间。尝试将其附加到节点对象上或将用户会话字符串剪切为最大8KB(6.028字符)。顺便说一句。您连续两次定义nodeObj。这个问题与drupal无关。

$scope.test = function() {
  var nodeObj = {
    "title": "Node Test",
    "body": "Node body contents test#2",
    "type": "page",
    "userSession": $cookieStore.get('user_session')
  };

  $http.post(
   "http://mydrupal-services-site/angularjs-headless/api/v1/node", 
    nodeObj
  ).then(function(data, status, headers, config) {
    $scope.message = data;
    console.log("Success:");
    console.log(data);
  }).then(function(data, status, headers, config) {
    console.error(data);
  });
}