有人能告诉我为什么当我在本地(通过localhost(工作时,下面的功能可以正确地从服务器下载我的文件,但当我尝试在远程服务器上部署我的应用程序时,却不能下载并返回我的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
如果您愿意访问与脚本目录相对应的文件,则应使用__dirname
此外,使用路径模块以与平台无关的方式构建文件位置也是一种很好的做法。
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