【问题标题】:How to read contents of a directory in linux on nodejs?如何在nodejs上读取linux中目录的内容?
【发布时间】:2022-02-12 04:14:48
【问题描述】:

我正在 nodejs 上创建一个应用程序,该应用程序必须读取安装位置中文件夹的内容。安装程序在安装位置创建目录“cert”。 我的代码是:

const dircert = './cert'
files = fs.readdirSync(dircert)
if (!files.length) {
    ***some code***
  } else {
    files.forEach(file => {
      if (path.extname(file) == '.key') {
        pathkey = path.resolve(dircert, file)
      }

      if (path.extname(file) == '.crt') {
        pathcert = path.resolve(dircert, file)
      }
    })

这在 Windows 中运行良好,但在 Linux 中却不行。安装程序无法读取内容。我需要更改什么以确保它在两者中都有效?我对linux很陌生。 该应用程序安装在 Windows 的 ProgramFiles 中,但安装在 linux 的 /opt/AppName 中。请提出建议。

编辑添加:所以这个 cert 文件夹在 linux 的 /opt/AppName/ 和 Windows 的 c:/ProgramFiles/company/App Name/ 下创建。虽然此代码在 Windows 上运行良好,但在 linux 上,此代码尝试在根目录下查找证书。如何确保它在 /opt/AppName 的安装位置查找文件夹,并且它应该在两个平台上都可以工作。

【问题讨论】:

  • 您可能需要提供有关您正在做什么和正在使用的工具的更多信息。当我修复错别字时,上面的代码在 Linux 上对我有用。 (您缺少一个结束的“}”。)“安装程序”是什么意思?你能描述一下吗?这可能与您首先要查找文件的相对位置有关。
  • 添加了更多信息。

标签: node.js linux windows unix fs


【解决方案1】:

从您的问题中不清楚如何安装文件以及如何执行代码。这两者在 Linux 中都很重要。您可以使用__dirname 节点变量和path.resolve() 来获取当前模块的目录。如果cert在当前模块之下,可以使用以下代码解析位置:

const path = require('path');
const dircert = path.resolve(__dirname, 'cert');

如果您使用的是 ES 模块:

import path from 'path';
const dircert = path.resolve('cert').

【讨论】:

  • 这就是问题所在,该进程从 /etc/systemd 运行,而 cert 文件夹位于安装它的位置,这完全不同../opt/AppName/。现在,当进程启动时,它会在根目录下查找证书,但我需要它来查看 /opt/AppName/cert。如何获取安装文件所在的路径?
  • 我的答案中的代码不起作用吗?如果 cert 不在当前模块之下,您可以使用相对路径,例如'../up/cert'
猜你喜欢
  • 2015-12-13
  • 2010-09-06
  • 2019-09-15
  • 1970-01-01
  • 1970-01-01
  • 2018-03-07
  • 2019-09-23
  • 1970-01-01
  • 2014-08-08
相关资源
最近更新 更多