2017-02-17 20 views
1

httpリクエストをファイルに保存するにはどうすればよいですか?ノードとしてnodejsを使用しています。それはnodejsを持つファイルにhttpリクエストを書き込む

user_info = 
    { 
     system_info: [ 
      {'browesr': browser}, 
      {'brower-version': version}, 
      {'cookies': cookieEnabled}, 
      {'os': os}, 
      {'os-version': osVersion} 
     ] 
    } 
} 

$.ajax({ 
    url: 'http://127.0.0.1:4560', 
    data: {"info" : JSON.stringify(user_info)}, 
    type: 'POST', 
    jsonCallback: 'callback', 
    success: function(data) { 
     var ret = jQuery.parseJSON(data); 
     $('#lblResponse').html(ret.msg); 
     console.log('success'); 
    }, 
    error: function(xhr, status, error) { 
     console.log('Error:' + error.message); 
     $('#lblResponse').html('Error connecting to the server.'); 
    } 
}); 

postメソッドが正常に動作し、サーバ側にデータがあまりにも受信で下に示したように私は、Ajaxを介してデータを送信します。 私の問題はデータを保存する方法です! 私は検索し、私はストリーミングについて何かを見つける。これは私のnodejsサーバーコードです。

var http = require('http'); 
var fs = require('fs'); 

http.createServer(function (req, res) { 

    console.log('Request Received'); 

    res.writeHead(200, { 
     'Context-Type': 'text/plain', 
     'Access-Control-Allow-Origin': '*' 
    }); 

    req.on('data', function (chunk) { 
     var rstream = fs.createReadStream(JSON.parse(chund)); 
     var wstream = fs.createWriteStream('info.txt'); 
     rstream.pipe(wstream); 
     str += chunk; 
     console.log('GOT DATA'); 
    }); 

    res.end('{"msg": "OK"}'); 
}).listen(4560, '127.0.0.1'); 
console.log('Server running at http://127.0.0.1:4560/'); 

私は、「INFO.TXT」まったくFSモジュールとストリーミングが、didntの仕事を使用するには、同じディレクトリに近いサーバーコードです。

誰でも私を助けることができますか?

答えて

1

ほとんどの方法があります。ここにあなたのコードに基づいて作業例です:

var http = require('http'); 
var fs = require('fs'); 

http.createServer(function (req, res) { 

    console.log('Request Received'); 

    var body = ''; 

    res.writeHead(200, { 
     'Context-Type': 'text/plain', 
     'Access-Control-Allow-Origin': '*' 
    }); 

    req.on('data', function (chunk) { 
     body += chunk; 
    }); 

    req.on('end', function() { 
     fs.writeFile('file.json', body, 'utf8'); 
     res.end('{"msg": "OK"}'); 
    }) 

}).listen(4560, '127.0.0.1'); console.log('Server running at http://127.0.0.1:4560/'); 

これは、あなたが「file.json」というファイルに送信したコンテンツを保存します。

url: 'http://127.0.0.1:4560', 
data: JSON.stringify({"info" : user_info}), 
contentType: "application/json", 
type: 'POST', 
jsonCallback: 'callback', 

あなたがファイルに書いているものを変更したい場合は、あなたは可能性がありそうのようなもの:

をあなたはまた、あなたのAjaxリクエストへの軽微な変更のカップルを作成する必要があり

req.on('end', function() { 
    var parsedJson = JSON.parse(body); 
    fs.writeFile('file.json', JSON.stringify(parsedJson.info), 'utf8'); 
    res.end('{"msg": "OK"}'); 
}) 

ファイルを追加したい、というよりも、それを上書きする場合は、あなたが何か行うことができます:

req.on('end', function() { 
    var parsedJson = JSON.parse(body); 
    // Read and parse the JSON file 
    var file = require('file.json'); 
    file[parsedJson.someKindOfID] = parsedJson; 
    fs.writeFile('file.json', JSON.stringify(file), 'utf8'); 
    res.end('{"msg": "OK"}'); 
}) 

しかし、これはファイル内のデータ構造によって異なります。

+0

ありがとうございました!私がfile.jsonを開いたときの1つの問題は、次のように保存されたデータです:info =%7B%22system_info%22%3A%5B%7B%22browser ....なぜノーマルjsonのようなデータは表示されませんでしたか? –

+0

あなたのAjaxリクエストで 'data:JSON.stringify({" info ":user_info})'を試し、 'contentType:" application/json "'を設定してください。 – dan

+0

正しいです!あなたが新しいオペレーティングシステムまたはWebブラウザでページを開くと、サーバーが以前のjsonを削除して新しいメッセージを書き込むとき、もう1つの問題が発生します。どのようにデータを追加できますか? –

関連する問題