【问题标题】:Node JS - no such file or directory filesystem moduleNode JS - 没有这样的文件或目录文件系统模块
【发布时间】:2021-08-14 11:44:16
【问题描述】:

我在发送电子邮件时尝试使用电子邮件模板。这是我的项目结构。

project-name
  client
  server
    email-templates
      confirm-email.html
    controllers
      accounts.js (currently here)

我正在像这样读取模板文件。

fs.readFile('../email-templates/confirm-email.html', async (error, html) => {
  // do some stuff
})

我认为已经进入了正确的道路。但我仍然收到错误。

错误:ENOENT:没有这样的文件或目录

我已经检查了关于 SO 的其他问题。但他们正在使用变量 __dirname,因为我使用的是 ES6 模块,我无权访问该变量。

// package.json
"type": "module",

有什么建议吗?

【问题讨论】:

标签: node.js express fs


【解决方案1】:

尝试访问文件时,尝试使用path模块解析文件的绝对路径。

fs.readFile(path.resolve(__dirname, '../email-templates/confirm-email.html'), function(err, html) {// do some stuff})

【讨论】:

  • 我正在使用 es6 模块。我无权访问__dirname 变量。
  • 奇怪的是,每个 Node.js 模块都应该有 __dirname 变量。你需要解决这个问题。
  • 我的package.json 中有"type": "module", 这就是原因
  • @vajad57 您可以在这里查看stackoverflow.com/questions/46745014/… 尝试使用 URL 文件访问符号为您的案例构建正确的 __dirname
【解决方案2】:

我无权访问__dirname,因为我使用的是 ES6 模块。我改用path.resolve() 来修复错误。

fs.readFile(
  path.join(path.resolve(), 'email-templates', 'confirm-email.html'),
  'utf8',
  (error, html) => {
    // do some stuff
  }
);

何时可以访问__dirname 变量:

const __dirname = path.resolve();

【讨论】:

    猜你喜欢
    • 2019-06-29
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 2015-08-20
    • 2018-12-27
    • 1970-01-01
    • 2014-12-07
    相关资源
    最近更新 更多