繁体   English   中英

NodeJS readFileSync()返回一个空字符串

[英]NodeJS readFileSync() returns an empty String

基本上,我使用Node的FS模块读取和写入JSON文件。 编写它完全可以正常工作,但是由于某种原因读取它会返回一个空字符串。

该文件称为records.js。

const dir = 'servers.json';

function write(content) {
    fs.writeFileSync(dir, content);
}

function read() {
    return fs.readFileSync(dir, 'utf-8');
}

var file = read(); //This is always empty

一件事:该脚本是一个单独的模块,位于我的主要index.js的子文件夹中。 但是,如果这是原因,编写文件也将不起作用。

目录

servers.json
src/
    index.js
    util/
        records.js

哦,我好笨! 我发布的代码实际上没有任何错误。 有一件事我没有包括的是,我解雇fs.open之前,我阅读文件,我不知道fs.open湿巾一个文件,我只是想, 如果它不存在,将创建它。

很抱歉浪费您的时间。

首先,每次您在文件系统上读取或写入任何文件时,请始终使用绝对路径。 当您像在此处那样使用相对路径时,则它相对于process.cwd()可能与您的想法无关。

在您的情况下,从records.js访问目录结构中文件的绝对路径为:

let path = path.join(__dirname, '..', '..', 'servers.json');

要么:

let path = path.join(__dirname, '../../servers.json');

而不仅仅是:

var file = read();

您实际上需要运行:

write('something');

接着:

var file = read();

另外,由于您要读取的文件似乎是JSON,因此您可能希望将其读取为JSON。 您可以使用require来做到这一点:

let object = require('../../file.json');

或者您可以读取它,然后使用JSON.parse()将其解析为JSON.parse()但在这种情况下,请确保将其放入try / catch ,否则您的程序将在无效的JSON上崩溃。

另一件事是,由于您说这是其他地方需要的模块,因此请确保确实导出要在其他地方使用的值。 例如:

var file = read();
module.exports = file;

以及使用位置:

var data = require('records.js');

但是请注意,当您拥有JSON文件时,可以直接在其他模块中要求它,如下所示:

var data = require('../../servers.json');

不需要一个仅具有读取JSON并将其导出到其他模块的目的的模块。

更新

正如Robert在评论中指出的那样,应该注意的是, require()readFileSync() (或anything Sync )仅应在事件循环的第一时间使用。 我假设这里文件在启动时被读取一次,结果被导出以供需要的模块使用。 如果在程序生存期内(例如,在请求控制器,事件处理程序,异步函数等中fs.readFile()读取文件,则仅应使用fs.readFile()或流函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM