有人可以告诉我为什么当我在本地工作时(通过本地主机),以下功能可以从服务器上正确下载我的文件,但是当我尝试在远程服务器上部署我的应用程序时却无法下载并返回我500 internal server error
吗?
async downloadFile(fileId: number): Promise<Buffer> {
const fileName = await this.getFileName(fileId);
const fileBuffer = await new Promise<Buffer>((resolve, reject) => {
fs.readFile(process.cwd() + '/files/' + fileName + '.xlsx', {}, (err, data) => {
if (err) reject(err)
else resolve(data)
});
});
return fileBuffer ;
}
感谢您的帮助
编辑,日志错误:
ENOENT: no such file or directory
答案 0 :(得分:0)
如果您愿意相对于脚本目录访问文件,则应使用__dirname
也可以使用path模块以与平台无关的方式来建立文件位置,这是一个好习惯。
const path = require('path')
const filePath = path.join(__dirname, 'files', `${fileName}.xlsx`)
process.cwd()
指的是节点进程的工作目录。在上下文中使用它会将您的代码与如何调用入口点联系起来。这不好。只要有可能,代码就不必知道其执行上下文即可工作。
一种更好的方法是使文件位置可配置(使用环境变量或配置文件),然后将下载文件夹的值传递给代码。
请参阅https://12factor.net/config
示例
const baseDir = process.env.FILES_PATH || '/some/default/location';
const filePath = path.join(baseDir, 'files', `${fileName}.xlsx`);
然后使用
运行程序FILES_PATH=/your/directory node your_script.js