预检的错误请求/响应具有无效的HTTP状态代码400

时间:2017-07-14 10:58:36

标签: angularjs node.js express twitter wso2

我正在使用AngularJS,node.js,express.js,wso2和Twitter API在Twitter和我的应用程序之间进行通信。 出现问题,我正试图通过wso2从我的应用程序向Twitter发送消息,以连接到Twitter并发送响应。

下面是将消息发送到Twitter帐户并使用Postman成功发布的XML,但是当我在我的应用程序中尝试它时,它给出错误请求/响应预检具有无效的HTTP状态代码400

<?xml version="1.0" encoding="UTF-8"?>
  <proxy xmlns="http://ws.apache.org/ns/synapse"
   name="tweetReply"
   startOnLoad="true"
   statistics="disable"
   trace="disable"
   transports="http">
 <target>
  <inSequence>
     <property expression="json-eval($.screen_name)" name="screen_name"/>
     <property expression="json-eval($.text)" name="text"/>
     <log level="full">
        <property name="INIT" value="##### Subas - Call to the Proxy 
   #####"/>
     </log>
     <twitter.init>
        <consumerKey>some keyt</consumerKey>
        <consumerSecret>some secret</consumerSecret>
        <accessToken>access-token</accessToken>            
       `<accessTokenSecret>access-token-secret</accessTokenSecret>`
     </twitter.init>
     <twitter.sendNewDirectMessages>
        <screenName>{$ctx:screen_name}</screenName>
        <text>{$ctx:text}</text>
     </twitter.sendNewDirectMessages>
     <property name="messageType" scope="axis2" value="application/json"/>
     <respond/>
    </inSequence>
   </target>
  <description/>
  </proxy>

当我从上面的XML生成URL时它工作正常,下面是我在生成上述XML时得到的URl

http://hostname:8280/services/tweetReply.tweetReplyHttpEndpoint

并且请求有效负载将是:

{
 "screen_name":"pawan_mks",
 "text":"hello"
 }

并将消息发送到Twitter,但使用AngularJS做同样的事情给我带来了问题

以下是我尝试使用的AngularJS代码:

 $scope.sendReplyMsg = function(replyMessage) {
        var dataObj = {
            "screen_name": "pawan_mps",
            "text": "Hi Pawan From Angular JS"
        };    
        var headerObj = {


       headers: {
            'Access-Control-Allow-Origin': '*',
            'Access-Control-Allow-Methods':'POST,GET,PUT,DELETE,OPTIONS',
            'Access-Control-Allow-Headers': 'Authorization,Lang',
            'Content-Type': 'application/json',
            'Accept': 'application/json',
           }
        };

$http.post("http://hostname:8280/services/tweetReply.tweetReplyHttpEndpoint", 
         dataObj, headerObj)
              .success(function(data, status, headers, config)
                {                  
                    console.log(data);
                })
                .error(function(data, status, headers, config) 
                 {
                   console.log(status);
                 })
          } 

1 个答案:

答案 0 :(得分:0)

当CORS配置出现问题时,通常会收到此错误消息。

如果您是从本地计算机或与您的后端服务主机不同的其他主机进行测试,则最终会发生跨域错误(CORS)。请你的后端开发人员在后端启用CORS,你在前端做的并不多。

解释为什么这对postman而不是chrome有效是因为Chrome强制CORS作为浏览器端安全性,而不是Postman。