google apps script から node.js の読み替え[postの仕方]

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,390

blossan

score 152

御世話になります。
node.jsからapiを呼び出すhttp通信についてお聞きしたいことがあります。

今までgoogle apps scriptで開発をしていたのですが、急遽別の言語であるnode.jsを利用しなければならない状況になりました。

node.jsは、google apps scriptでも動くjavascriptで動いている言語なので、まず、
google apps script からnode.jsへの読み替えを学習の始めとしたいと考えています。

現在 google apps script で起動したapiのコードが以下になります。
認証を通して、apikeyを受け取るものです。

function myFunction() {
  var url = 'https://api.soracom.io/v1/auth';
  var headers = {
             "Accept": "application/json"
  };

  var payload = {
              "email":"登録したメールアドレス",
              "password":"登録したパスワード"
  };

   var options =
   {

     'contentType': 'application/json',
     "headers":headers,
     "method": "post",
     "payload" : JSON.stringify(payload)
   };

  var response = UrlFetchApp.fetch(url,options);
  var data = JSON.parse(response.getContentText());
  Logger.log(data);
}

上記と同じpost通信をする機能をnode.jsで実現したいと思います。
自分でいろいろ思考錯誤し、requestモジュールを利用したのでが、エラーコードを吐いてしまいます。

上記のgoogle apps scriptと同じ機能を考えて作ったものです。
認証を通し、結果を受け取るというものです。

var request = require('request');

    var headers = {
                 "Accept": "application/json"
    };

    var payload = {
            "email":"登録したメールアドレス",
            "password":"登録したパスワード"
    };

    var options = {
      headers:headers,
      'contentType': 'application/json',
      uri:'https://api.soracom.io/v1/auth',
      "payload" : JSON.stringify(payload),
      json: true
    };


request.post(options, function(error, response, body){
  if (!error && response.statusCode == 200) {
    console.log(body.name);
  } else {
    console.log('error: '+ response.statusCode);
  }
});

【お聞きしたいこと】
node.jsでpost通信をする方法になります。文法的な指摘を頂ければと思います。

【追記】
ご指摘ありがとうございます。「ソラコムapiをlambdaのnode.jsで実行する」という目的のために開発を進めています。しかし、lambdaの使い方もnode.jsの書き方も分からない現状でした。そこで、唯一ソラコムapiで実行できたgoogle apps scriptを出発点に、質問し解決できればと考えていました。また、実行できたコードがあれば、質問し易いと判断したのですが、逆に誤解を与えてしまい申し訳ありませんでした。
コメントにありましたエラーですが、以下になります。
{
"errorMessage": "RequestId: 681aa76f-bec9-11e6-b389-bfe89320e0af Process exited before completing request"
}
よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • mit0223

    2016/12/10 09:50

    どのようなエラーになったのか追記してもらえますか?同じ内容を違うプラットフォームでつぎつぎと質問されておりますよね?ソラコムのステマが疑われてしまいますよ。

    キャンセル

回答 1

checkベストアンサー

+1

パッと見で気になる所が、以下に3つあります。

var options = {
      headers:headers,
      'contentType': 'application/json',
      uri:'https://api.soracom.io/v1/auth',
      "payload" : JSON.stringify(payload),
      json: true
    };


1.
「'contentType': 'application/json'」は、最初に定義したheaders変数に含めるのでは?

2.
「"payload" : JSON.stringify(payload)」は、これだけ値がダブルクォーテーションで囲まれてますが、他が付いてないので不要では?

3.
あと payload という名称の利用は正しいのでしょうか?GithubのReadmeを見た感じだと、 body が使われているようですが。
(明快なサンプルが無いので試さないと分かりませんが)

書いてくいただいた、今回発生したエラーの内容ですが、これはAWSが「何か分かんないけどエラーになりました」と言ってる程度なので、「context.done」をソースに書いて、具体的なエラー内容を確認してください。

おまけ: Lambdaのトラブルシューティング

node.jsもLambdaも勉強中でしたら、まずはローカル環境のnode.jsでpostを成功させてから、Lambdaで試した方が早いと思います。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/12/12 10:05

    エラー自体もまだあやふやな状態だったのですね。ローカルで成功させてみます。回答ありがとうございます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.21%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる