expressのapiサーバーでクライアントからmultipart/formdataを受け取りmulterモジュールを用いて一度ディスクへストレージしたファイルたちを再度別のサーバーに送る際に、きっちり1分後(別のサーバーへpost requestを送った直後から数えて)webサーバー側で下記のエラーが発生します。送り先のサーバーではエラーは起きず、streamを待っている状態でストップします。
streamを送っているのですが、1分たつまではちゃんとチャンクが届いております。
webサーバー、apiサーバーはローカル環境(windows 10 pc)にてたてております。
送り先の別サーバーはレンタルサーバー(linux centos7)です。
色々と試しましたが、なにが原因かつかめません。
また、webサーバー、apiサーバーもレンタルサーバーでたてて本番環境でも試しましたが、webサーバー側でエラーはでないものの同様に1分で接続が切れてしまいます。(ブラウザでは
Error: Network Error
at t.exports (app.1587455.js:2)
at XMLHttpRequest._.onerror (app.1587455.js:2)
Failed to load resource: net::ERR_CONNECTION_RESET
というエラーが出ます。
)
毎回1分でエラーが出るので何かしらのタイムアウトなのかなと思っておりますが、
どなたか詳しい方、なにか原因の候補として考えられることはありますでしょうか。
ご教授よろしくお願いいたします。
error
1Unhandled rejection RequestError: Error: socket hang up 2 at new RequestError (E:\hiroki\works\NUXT\h_html\node_modules\request-promise-core\lib\errors.js:14:15) 3 at Request.plumbing.callback (E:\hiroki\works\NUXT\h_html\node_modules\request-promise-core\lib\plumbing.js:87:29) 4 at Request.RP$callback [as _callback] (E:\hiroki\works\NUXT\h_html\node_modules\request-promise-core\lib\plumbing.js:46:31) 5 at self.callback (E:\hiroki\works\NUXT\h_html\node_modules\request\request.js:185:22) 6 at Request.emit (events.js:327:22) 7 at Request.EventEmitter.emit (domain.js:482:12) 8 at Request.onRequestError (E:\hiroki\works\NUXT\h_html\node_modules\request\request.js:877:8) 9 at ClientRequest.emit (events.js:315:20) 10 at ClientRequest.EventEmitter.emit (domain.js:482:12) 11 at Socket.socketOnEnd (_http_client.js:453:9) 12 at Socket.emit (events.js:327:22) 13 at Socket.EventEmitter.emit (domain.js:482:12) 14 at endReadableNT (_stream_readable.js:1221:12) 15 at processTicksAndRejections (internal/process/task_queues.js:84:21) 16From previous event: 17 at Request.plumbing.init (E:\hiroki\works\NUXT\h_html\node_modules\request-promise-core\lib\plumbing.js:36:28) 18 at Request.RP$initInterceptor [as init] (E:\hiroki\works\NUXT\h_html\node_modules\request-promise-core\configure\request2.js:41:27) 19 at new Request (E:\hiroki\works\NUXT\h_html\node_modules\request\request.js:127:8) 20 at request (E:\hiroki\works\NUXT\h_html\node_modules\request\index.js:53:10) 21 at E:\hiroki\works\NUXT\h_html\server\file.js:105:5 22 at Immediate.<anonymous> (E:\hiroki\works\NUXT\h_html\node_modules\multer\lib\make-middleware.js:53:37) 23 at processImmediate (internal/timers.js:458:21) 24 at process.topLevelDomainCallback (domain.js:137:15)
クライアントから送られてきたファイル達を読み込みstreamをwebサーバーから別のレンタルサーバーに送る
javascript
1var allfiles = []; 2 fileNameStore.forEach((value) => { 3 allfiles.push(fs.createReadStream(`./${folderName}/${value}`)) 4 }) 5 6 let data = JSON.parse(req.body.data) 7 var formData = { 8 "data": req.body.data, 9 "file": allfiles, 10 } 11 12 var options = { 13 url: `${process.env.DB_API}/uploadGame`, 14 method: "POST", 15 formData: formData, 16 headers: { 17 "Content-Type": "multipart/form-data" 18 } 19 } 20 21 console.log("Just before request") 22 requestPromise(options) 23 .then(function (body) { 24 fileNameStore.forEach((value) => { 25 fs.unlink(`./${folderName}/` + value, function (err) { 26 }); 27 }) 28 console.log("Game send done") 29 res.send("Fin") 30 }) 31 .catch(function (err) { 32 fileNameStore.forEach((value) => { 33 fs.unlink(`./${folderName}/` + value, function (err) { 34 }); 35 }) 36 throw (err) //←ここのエラー 37 });
streamをレンタルサーバーで受け取る
javascript
1app.post("/uploadGame", (req, res, err) => { 2 var busboy = new Busboy({ headers: req.headers }); 3 var txtdata 4 var totalsize = 0 5 console.log("1") 6 7 busboy.on('field', (fieldname, val, fieldnameTruncated, valTruncated, encoding, mimetype) => { 8 console.log("2") 9 txtdata = JSON.parse(val) 10 console.log(txtdata) 11 }); 12 busboy.on('file', (fieldname, file, filename, encoding, mimetype) => { 13 console.log("3") 14 file.on('data', function (data) { 15 console.log(data) 16 totalsize += data.length 17 console.log(totalsize) 18 }); 19 file.on('end', function () { 20 console.log("file end") 21 }); 22 23 24 var thisPath = txtdata.file_paths.filter(function (v, index) { 25 if (v.name == filename) return true; 26 })[0].path 27 let savePath = "./games/" + String(txtdata.game_id) + "/build/" + getRidOf(thisPath); 28 let makePath = "games/" + String(txtdata.game_id) + "/build/" + getRidOf(thisPath) + "/" 29 // .then(() => { 30 fs.mkdirsSync(makePath) 31 file.pipe(fs.createWriteStream(savePath + "/" + filename.split(".Date_Now0721.")[1])) 32 33 }); 34 busboy.on('finish', function () { 35 console.log("fin") 36 res.writeHead(200, { 'Connection': 'close' }); 37 res.end("That's all folks!"); 38 }); 39 return req.pipe(busboy); 40});
回答1件
あなたの回答
tips
プレビュー