使用firebase函数读取文件



我有一个Firebase函数,想要读取存储在子文件夹中的html文件。

── functions
├── src
|   ├── index.ts // Here is the function
|   ├── html
|   |   ├── template.html // the file I want to read

我试图通过const html = fs.readFileSync('./html/template.html');读取文件,但它总是告诉我

错误:ENOENT:没有这样的文件或目录,打开'/html/template.html'在Object.openSync

我几乎解决了stackoverflow上关于这个主题的每一个问题,但对我来说都不起作用。我还尝试将文件与函数放在同一文件夹中,但它总是给我错误。

我需要安装一些程序包还是以某种方式导入文件才能访问它?

对于从搜索结果进入本文的任何人。。。

解决这个问题的方法不是使用path.resolve

这里的问题是,fs.readFileSync解析相对于process.cwd()(从中执行目录节点(的路径。在firebase函数的情况下,这将始终是firebase.json中为source定义的目录(默认情况下为functions目录(
此处记录了此功能:
https://nodejs.org/api/path.html#path_path_resolve_paths

如果在处理完所有给定的路径段后,尚未生成绝对路径,则使用当前工作目录。

path.resolve具有相同的行为。它总是解析为一条绝对路径。如果您传入的路径不是绝对路径,则会在其前面加上process.cwd()
节点文档中似乎没有记录这一点,但您可以在此处看到:https://github.com/nodejs/node/blob/029d1fd797975ef89b867f9d606257f0f070a462/lib/path.js#L1017

你可以用两种方法来解决这个问题:

  • 使用相对于函数根目录的路径(在本例中为src/html/template.html(
  • 使用__dirname(path.resolve(__dirname, './html/template.html')

__dirname是一个变量,它将始终返回当前正在执行的文件的目录的绝对路径。

在将路径传递给fs.readdirSync()方法之前,需要使用path.resolve()方法,该方法将把路径解析为绝对路径。因此,以下方法应该起作用:

const path = require('path');
// ...
let content = fs.readFileSync(
path.resolve('./html/template.html')
);

相关内容

  • 没有找到相关文章

最新更新