我有一个可以在Docker Container
中工作的Web项目。我发现了奇怪的问题,不知道问题的主要原因。让我尝试解释一下。
来自Vue.js
应用程序的所有用户请求都转到Node.js HTTP web server
。通过Web界面,用户可以加载csv
个文件。
用户单击浏览器中的特定按钮时,他们向HTTP Web服务器发出发布请求:
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)
})
}
下面的代码位于Node.js HTTP Web服务器内部,它将来自远程SFTP服务器的csv文件加载到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)
}
})
P.S。我使用ssh2-sftp-client库从远程SFTP服务器加载csv文件。
问题是在下载10个不同的csv文件后,下载功能停止工作。在我看来,docker容器内存出了问题。
我的Dockerfile
看起来很简单:
FROM node:latest
COPY / ./
EXPOSE 3010
RUN mkdir -p /root/Downloads
CMD ["node", "server/bin/www"]
如何解决此问题?我的错误到底在哪里?