2017-08-30 13 views
0

エクスプレスルータ経由で/ api/userのようなGETエンドポイントを公開するエクスプレス/ノードアプリケーションがあります。レスポンスはJSONで、私はlocalhost:8080/api/userを押したときにJSONをファイルにダウンロードしたいと思っています。エクスプレス/ノードアプリケーションのファイルにHTTP GET応答を保存する

私はres.downloadで試しましたが、レスポンスデータをどのように処理するかはわかりませんでした。これは重複した質問かもしれませんが、私はこのユースケースの例を見つけることができません。

ブラウザでエンドポイントを呼び出すと、ダウンロードのプロンプトが表示され、デフォルトの場所にダウンロードされます。

router.route('/user') 
.get((req, res) => { 
MyService.get().then((result) => { // the get method resolves a promise with the data 
    // Prompt for download 
}).catch((err) => { 
    console.log(err); 

    res.status(500).json({ 
    status: 500, 
    data: err 
    }); 
}); 
}); 

答えて

0

は、だから私は、以下の2のいずれかの方法でこれを行うことができた、

router.route('/user') 
.get((req, res) => { 
MyService.get().then((result) => { 
res.attachment('users.csv'); 
/*or you can use 
    res.setHeader('Content-disposition', 'attachment; filename=users.csv'); 
    res.set('Content-Type', 'text/csv');*/ 
res.status(200).send(result); 
}).catch((err) => { 
console.log(err); 
    res.status(500).json({ 
    status: 500, 
    data: err 
    }); 
}); 
}); 
0

ノードファイルシステムモジュールを使用してファイルにJSON応答を書き込む必要があります。ここで例を見ることができますWriting files in Node.js

0

私が正しく理解している場合、送信されたデータ/api/userをルートに送信しているファイルに保存しますか?私は右のあなたを得た場合

var fs = require('fs') 

app.get("/api/user", function(req, res){ 

    var data = fromDb() 
    fs.writeFileSync("/tmp/test", JSON.stringify(data)) 
    res.send(data) 

}) 
+0

はあなたの応答をありがとうございました。私が必要とするのは、ファイルへのレスポンスをダウンロードするだけです。/ api/userエンドポイント – Sai

+0

を打つと、私のアプローチがうまくいくはずです。 – Ozgur

0

あなたは以下のようにContent-TypeContent-dispositionヘッダを試すことができます。

res.writeHead(200, {'Content-Type': 'application/force-download','Content-disposition':attachment; filename={your_file_name}.json}); 
res.end(data); 

res.end(data)

  • dataがあなたのJSONデータです。

  • {your_file_name}.jsonは、実際のファイル名です。名前を付けてください。

+0

あなたのresposneありがとうございます。 express.jsを使ってこれをネイティブに行う方法はありますか? – Sai

関連する問題