我有一个 node .JS应用程序运行在AWS EC2的Linux上,使用fs模块读取HTML模板文件.以下是应用程序的当前 struct :

/server.js
/templates/my-template.html
/services/template-reading-service.js

HTML模板将始终位于该位置,但是,模板阅读服务可能会从我使用的模板阅读服务中移动到不同的位置(更深的子目录等).readFileSync()加载文件,如下所示:

var templateContent = fs.readFileSync('./templates/my-template.html', 'utf8');

这会引发以下错误:

Error: ENOENT, no such file or directory './templates/my-template.html'

我想这是因为路径"/"的缘故正在解析为"/services/"目录,而不是应用程序根目录.我也try 过把路径改成"/模板/我的模板."html",这很有效,但它似乎很脆弱,因为我认为这只是相对于"上一个目录"的解析.如果我将模板读取服务移动到更深的子目录中,则该路径将中断.

那么,相对于应用程序的根引用文件的正确方法是什么?

推荐答案

try

var templateContent = fs.readFileSync(path.join(__dirname, '../templates') + '/my-template.html', 'utf8');

Linux相关问答推荐

Linux x86_64上PIE ELF可执行文件的.Text段的基本虚拟地址

如何在Linux上获取clang中的模板实例化统计?

从一个文件中读取文件名并将文件名和内容存储到另一个带有|的文件中作为分隔符

JSON 转义 CURL/JQ 输出

"‘operator<<’匹配失败(可能是因为我的C++/GCC版本问题)"

Google Cloud Ops Agent Mongo 集成错误 - AuthenticationFailed:SCRAM 身份验证失败,storedKey 不匹配

将行转换为一条

$RANDOM 变量在输出通过管道后似乎没有改变

如何使用换行符或制表符或空格 grep 多行字符串

进程Forking 后 pthread_key_create() 生成的密钥会发生什么?

如何在 linux 上为 JNI 应用程序编译动态库?

Linux命令行如何接受没有pin的蓝牙设备配对

diff 命令仅获取不同行的数量

如何在不重新打印的情况下更新终端中的打印消息

我可以在 Ubuntu 上使用 Homebrew 吗?

bash shell 脚本函数定义(如f () {})中使用的括号是什么?它与使用function关键字不同吗?

如何在 Linux 上取消关机?

Anaconda:禁用提示更改

如何关闭被杀死的程序打开的套接字?

.NET Core 中的跨平台文件名处理