Node.js'fs.readdirSync'丢失了用于读取文件的目录名称

时间:2019-06-11 04:11:53

标签: node.js

我正在尝试在启动时读取与.js相同的目录中的目录。而不是打开./open_Bugs/file,而是进入./open_Bugs/并提取文件,然后尝试打开./file,我收到错误提示是不存在这样的目录(因为它不存在),我是我对如何将/ open_Bugs /附加到我的读取查询上而没有进行一些尴尬的附加操作几乎没有什么困惑。在此先感谢您的帮助!

fs.readdirSync('./open_Bugs/').forEach(file => {
    fs.readFile(file, function read(err, text){
        if (err) throw err;
        bugArray.push ({
            filename: file,
            info: text,
        })
    })
});

这也是我在节点上尝试的第一个程序,因此我愿意接受有关更好做法的任何建议。

1 个答案:

答案 0 :(得分:2)

fs.readdirSync()的设计在于,它仅返回基本文件名。如果需要完整的路径名,则可以将该文件名与传递到fs.readdirSync()的路径手动组合,因为您将始终知道它是什么,因为它是您作为fs.readdirSync()的参数传递的。

您可以这样做:

const path = require('path');
const fs = require('fs');

let queryPath = './open_Bugs/';
fs.readdirSync(queryPath).forEach(file => {
    let fullFilename = path.resolve(queryPath, file);
    fs.readFile(fullFilename, function read(err, text){
        if (err) throw err;
        bugArray.push ({
            filename: fullFilename,
            info: text,
        })
    })
});

仅供参考,混合同步和异步文件I / O功能非常奇怪。通常,您会选择一个模型或另一个模型。在任何多请求服务器中,除了服务器启动期间,您始终只希望使用异步文件操作。在单个用户脚本中,您可以使用同步操作。

此外,您永远不要编写类似以下的代码:

if (err) throw err;

在异步(基于非承诺)回调中。它没有任何作用,只是默默地隐藏您的错误。由于回调是异步的,因此throw不会传播到任何有用的地方。您需要编写真正的错误处理代码(我不知道您想要的错误行为是什么)。