23

Winston モジュールを使用して、オフライン アプリの毎日のログ ファイルを作成しました。そのファイルを POST 経由でリモート サーバーに送信またはアップロードできるようにする必要があります (その部分は既に存在します)。

メモリを占有しないようにファイルをチャンクで書き込む必要があることはわかっているので、fs.createReadStreamを使用していますが、サンプル テキストだけを送信しても 503 応答しか返されないようです。

編集

受信者は、データの名前が「data」であることを期待していたことがわかりました。「application/x-www-form-urlencoded」と同期fs.readFileSyncでしか動作しないようにすることができたので、 createReadSteam を削除しました。これをphpサーバーで「multipart/form-data」に変更すると、createReadStreamを再度使用できるようになりますか、それはjsonファイルを物理的にアップロードするように変更した場合のみです。

私は過去数週間だけノードを学んでいるので、どんなポインタでも感謝して受け取ります.

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

var post_options = {
    host: 'logger.mysite.co.uk',
    path: '/',
    port: 80,
    timeout: 120000,
    method: 'POST',
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
    }
}

var sender = http.request(post_options, function(res) {
    if (res.statusCode < 399) {
        var text = ""
        res.on('data', function(chunk) {
            text += chunk
        })
        res.on('end', function(data) {
            console.log(text)
        })
    } else {
        console.log("ERROR", res.statusCode)
    }
})

var POST_DATA = 'data={['
POST_DATA += fs.readFileSync('./path/file.log').toString().replace(/\,+$/,'')
POST_DATA += ']}'
console.log(POST_DATA)
sender.write(POST_DATA)
sender.end()
4

3 に答える 3

9

https://github.com/mikeal/request#formsからコピー

var r = request.post('http://service.com/upload', function optionalCallback (err, httpResponse, body) {
  if (err) {
    return console.error('upload failed:', err);
  }
  console.log('Upload successful!  Server responded with:', body);
})
var form = r.form()
form.append('my_field1', 'my_value23_321')
form.append('my_field2', '123123sdas')
form.append('my_file', fs.createReadStream(path.join(__dirname, 'doodle.png')))
于 2014-08-27T07:26:36.643 に答える