У меня есть веб-проект, который работает в Docker Container
.Я обнаружил странную проблему и не знаю ее основную причину.Позвольте мне попытаться объяснить.
Все запросы пользователей из приложения Vue.js
отправляются на Node.js HTTP web server
.С помощью веб-интерфейса пользователи могут загружать csv
файлов.
Когда пользователи нажимают определенные кнопки в браузере, они отправляют запросы на веб-сервер HTTP:
getFile (fileName) {
axios.post('/csv', {file_name: fileName}).then((response) => {
const url = URL.createObjectURL(new Blob([iconv.encode(response.data, 'win1251')]))
const link = document.createElement('a')
link.href = url
link.setAttribute('download', fileName)
document.body.appendChild(link)
link.click()
}).catch((error) => {
console.log(error)
})
}
Код ниже, который находится внутри узла.js HTTP веб-сервер загружает файл csv с удаленного SFTP-сервера в локальную систему Docker Container и отправляет этот файл в ответ браузеру:
router.post('/', (req, res) => {
const fileName = req.body.file_name
const remotePath = '/reports/' + fileName
const localePath = path.join(process.env.HOME || process.env.USERPROFILE, 'Downloads/' + fileName)
sftp.connect(config.sftpServer, 'on').then(() => {
sftp.fastGet(remotePath, localePath, {}).then(() => {
res.header('Content-type', 'text/csv; charset=windows-1251')
res.sendFile(localePath)
sftp.end()
}).catch((err) => {
sftp.end()
console.log(err, 'fastGet method error')
})
}).catch((err) => {
sftp.end()
console.log(err, 'connect method error')
})
try {
fs.readdirSync(path.join(process.env.HOME || process.env.USERPROFILE, 'Downloads/')).forEach(file => {
console.log(file);
});
fs.unlink(localePath)
} catch (err) {
console.log(err)
}
})
PS Я использую библиотеку ssh2-sftp-client загрузить файлы csv с удаленного сервера SFTP.
Проблема заключается в том, что после 10 загрузок различных файлов csv функция загрузки перестает работать.Мне кажется, что-то не так с памятью контейнера докера.
Мой Dockerfile
выглядит довольно просто:
FROM node:latest
COPY / ./
EXPOSE 3010
RUN mkdir -p /root/Downloads
CMD ["node", "server/bin/www"]
Как решить эту проблему?Где именно моя ошибка?