2016-03-31 10 views
-1
var http = require('http'); 
var qhttp = require('q-io/http'); 
var formidable = require('formidable'); 
var categories; 

qhttp.read("https://api.myjson.com/bins/509wa") 
.then(function (json) { 
    categories = JSON.parse(json).categories; 
}) 
.then(null, console.error); 


module.exports.putCat = function(req, res){ 

    var form = new formidable.IncomingForm(); 

    form.parse(req, function(error, fields, files){ 
     if(error){console.log(error)} 
     fields["catProd"] = []; 
     categories.push(fields); 

     var dataString = JSON.stringify({categories: categories}); 
     console.log(dataString); 
     var options = { 
      host : "api.myjson.com", 
      path : "/bins/509wa.json", 
      method: "PUT", 
      headers: {"Content-Type": "application/json", "Content-Length": dataString.length} 
     }; 

     function callback(response){ 
      var body = ""; 
      response.on('data', function(chunk){ 
       body+=chunk; 
      }); 
      response.on('end', function(){ 
       console.log('Received data: '+body); 
      }); 
     } 

     http.request(options, callback).write(dataString); 
     res.end(); 
    }); 
}; 

screenshot長いJSON文字列に対してhttpリクエストが機能しないのはなぜですか?

それはJSON.stringify("hello":"world");ようなもので完璧に動作します。しかし、私は私のデータを保存する必要があります(それははるかに長いです)としようとすると、APIに何も送信しません。前もって感謝します!

+1

あなたがここにあなたのコードを貼り付けなければならない、それは画像よりも読みやすいです。あなたはまた、あなたが得ている応答と一緒に動作しない文字列を提供する必要があります。 – Shomz

+0

コードをスクリーンショットではなくコードとして投稿してください。 – ThiefMaster

+2

あなたは私たち***「私のデータは、(はるかに長いである)保存する必要があり、」あなたが言うように動作しない場合、実際の***のためのコードを表示する必要があります。あなたはこの問題を理解していました - – jfriend00

答えて

0

あなたはcategories変数との競合状態を持っています。モジュールをロードした後すぐにputCat()という外部コードが呼び出された場合は、categoriesのデータがまだ利用できないことがあります。

あなたがするべきことをロードしている非同期モジュールをお持ちの場合は、約束を返すモジュールコンストラクタが公開されていて、その約束が解決した後にputCat()を実行する必要があります。

+0

@StanleyNguyenを追加します – jfriend00

+0

ありがとう、私はこれが私が間違っていた場所だと思う –

関連する問題