菜鸟教程小白 发表于 2022-12-13 12:26:53

ios - 对象没有方法 'Status' iOS SDK 和解析云代码


                                            <p><p>我在使用 Parse Cloud Code 和 Xcode(swift) 时尝试从 Spotify 请求访问/刷新 token 。 </p>

<pre><code>var express = require(&#34;express&#34;),
app = express(),
crypto = require(&#39;crypto&#39;),
buffer = require(&#39;buffer&#39;),
url = require(&#39;url&#39;);

var config = new Parse.Object(&#34;Config&#34;);
config.set(&#34;client_id&#34;, &#34;&#34;);
config.set(&#34;client_secret&#34;, &#34;&#34;);
config.set(&#34;callback_url&#34;, &#34;&#34;);
config.set(&#34;endpoint&#34;, &#34;https://accounts.spotify.com&#34;);

var AUTH_HEADER = &#34;Basic &#34; + new buffer.Buffer(config.get(&#34;client_id&#34;)+ &#34;:&#34; + config.get(&#34;client_secret&#34;)).toString(&#34;base64&#34;);

app.use(express.bodyParser());

Parse.Cloud.define(&#34;swap&#34;, function (req, res) {
if (!req.body || !req.body.hasOwnProperty(&#34;code&#34;)) {
    res.status(550).send(&#34;Permission Denied&#34;);
    return;
}

   var form_data = {
    &#34;grant_type&#34;: &#34;authorization_code&#34;,
    &#34;redirect_uri&#34;: config.get(&#34;callback_url&#34;),
    &#34;code&#34;: req.body.code
};

   Parse.Cloud.httpRequest({
    method: &#34;POST&#34;,
    url: url.resolve(config.get(&#34;endpoint&#34;), &#34;/api/token&#34;),
    headers: {
      &#34;Authorization&#34;: AUTH_HEADER,
      &#34;Content-Type&#34;: &#34;application/x-www-form-urlencoded&#34;
    },
    body: form_data,
    success: function(httpResponse) {
      if (httpResponse.status != 200) {
            res.status(550).send(&#34;Permission Denied&#34;);
            return;
      }

      var token_data = JSON.parse(httpResponse.text);

      res.status(200).set({
            &#34;Content-Type&#34;: &#34;application/json&#34;
      }).send(token_data);
    },
    error: function(httpResponse) {
      res.status(500).send(&#34;Internal Server Error&#34;);
      return;
    }
   });
});

Parse.Cloud.define(&#34;refresh&#34;, function (req, res) {
if (!req.body || !req.body.hasOwnProperty(&#34;refresh_token&#34;)) {
    res.status(550).send(&#34;Permission Denied&#34;);
    return;
}

   var refresh_token = req.body.refresh_token;

   var form_data = {
    &#34;grant_type&#34;: &#34;refresh_token&#34;,
    &#34;refresh_token&#34;: refresh_token
   };

   Parse.Cloud.httpRequest({
    method: &#34;POST&#34;,
    url: url.resolve(config.get(&#34;endpoint&#34;), &#34;/api/token&#34;),
    headers: {
      &#34;Authorization&#34;: AUTH_HEADER,
      &#34;Content-Type&#34;: &#34;application/x-www-form-urlencoded&#34;
    },
    body: form_data,
    success: function(httpResponse) {
      if (httpResponse.status != 200) {
            res.status(550).send(&#34;Permission Denied&#34;);
            return;
      }

      res.status(httpResponse.status).set({
            &#34;Content-Type&#34;: &#34;application/json&#34;
      }).send(httpResponse.text);

    },
    error: function(httpResponse) {
      res.status(500).send(&#34;Internal Server Error&#34;);
      return;
    }
   });

});

Parse.Cloud.define(&#34;api/token&#34;, function (req, res) {

   res.status(200).set({
    &#34;Content-Type&#34;: &#34;application/json&#34;
   });

   switch (req.body.grant_type) {
    case &#34;authorization_code&#34;: {
      res.status(200).set({
            &#34;Content-Type&#34;: &#34;application/json&#34;
      }).send({
            &#34;refresh_token&#34;: &#34;REFRESH TOKEN&#34;
      });
    } break;
    case &#34;refresh_token&#34;: {
      res.status(200).set({
            &#34;Content-Type&#34;: &#34;application/json&#34;
      }).send({
            &#34;access_token&#34;: &#34;ACCESS TOKEN&#34;
      });
    } break;
    default: {
      res.status(550).set({
            &#34;Content-Type&#34;: &#34;text/html&#34;
      }).send(&#34;&lt;html&gt;&lt;body&gt;&lt;h1&gt;Access Denied&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;&#34;);
    } break;
   }
});

app.listen();
</code></pre>

<p>在 Xcode 中调用函数如下:</p>

<pre><code>   PFCloud.callFunctionInBackground(&#34;swap&#34;, withParameters: nil) { (results, error: NSError?) -&gt; Void in
                if error != nil {
                  // Your error handling here
                  print(error)

                } else {
                  // Deal with your results (votes in your case) here.

                  print(results)

                }
            }
</code></pre>

<p>我收到以下错误:</p>

<p>: TypeError: Object # has no method 'status'
    在 main.js:29:13(代码:141,版本:1.9.1)
可选(错误域=解析代码=141“类型错误:对象#没有方法'状态'
    在 main.js:29:13"UserInfo={code=141,temporary=0,error=TypeError: Object # has no method 'status'
    在 main.js:29:13,NSLocalizedDescription=TypeError: Object # has no method 'status'
    在 main.js:29:13})</p>

<p>谢谢!</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>在处理完这段确切的代码并试图让它工作后,我终于意识到这是 node.js 代码,而不是 Parse 云代码。如果您仍想使用它,我建议您阅读 Parse 的有关将 node.js 与 Parse 结合使用的文档。否则,你最好做点别的事情,比如在 Heroku 上启动 Spotify 提供的 ruby​​ 脚本。</p>

<p>如果您喜欢冒险,可以尝试将代码移植到 Parse Cloud 代码格式,但这似乎相当困难</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 对象没有方法&#39;Status&#39; iOS SDK 和解析云代码,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/34193712/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/34193712/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 对象没有方法 &#39;Status&#39; iOS SDK 和解析云代码