- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的 Node 应用程序中,我有一个 init
函数:
function init() {
if (!fs.existsSync("../schedule.json"))
fs.createReadStream('../template.json').pipe(fs.createWriteStream('../schedule.json'));
var content = fs.readFileSync("../schedule.json", "utf8");
return JSON.parse(content);
}
每当我尝试从 cmd 或 git bash 运行它时,它都会因错误而崩溃:
SyntaxError: Unexpected end of JSON input
所以我在 vscode 中调试它,发现变量 content
只包含一个空字符串,这意味着 readFileSync
返回一个空字符串。
现在奇怪的是;如果在 cmd 或 git bash 中启动(无论是常规模式还是调试),或者在 vscode 中以 Debug模式启动,它永远不会工作,但如果我在 vscode 中重新启动调试器(不是启动和停止,而是实际点击重新启动按钮),那么我得到每隔一次从 readFileSync 返回的字符串形式的 json 文件的正确内容。
更新:我尝试删除 Schedule.json 文件,然后单步执行代码。它表明它实际上没有进入 if(!fs.existsSync("../schedule.json"))
语句。这几乎就像一个缓存错误。
最佳答案
pipe
导致事情异步发生 - 令人惊讶的是它曾经在 vscode 中工作,除非你正在逐步允许 pipe
时间完成其工作,或者当您使用重新启动时,它可能会看到上次运行的文件。
相反,您需要 wait for it to finish做它正在做的事情:
var writer = fs.createWriteStream('../schedule.json');
fs.createReadStream('../template.json').pipe(writer);
writer.on('finish', function() {
//It's safe to read the file here
});
但是,这对您不起作用,因为您的函数期望完全同步工作并返回结果。如果您改用回调或 Promise(这可能需要也可能不需要大量工作,具体取决于对 init
的调用周围发生的情况),您可以使上述工作正常进行,或者您可以使用与您已经使用的类似的同步函数来代替 pipe
:
function init() {
var templ = null;
if (!fs.existsSync("../schedule.json")) {
templ = fs.readFileSync("../template.json", "utf8");
fs.writeFileSync("../schedule.json", templ, "utf8");
}
var content = templ != null ?
templ :
fs.readFileSync("../schedule.json", "utf8");
return JSON.parse(content);
}
关于javascript - fs.readFileSync 有时仅在特定情况下返回有效字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43801387/
我尝试使用方法获取文件 readFileSync : import fs from 'fs'; import path from 'path'; const templateFile = fs.rea
我对 Node.js 比较陌生,一直在四处寻找,但找不到解决方案。我确实检查了需要的 javascript 文件,它似乎没有“readFileSync”的方法。也许我没有合适的要求文件?我很难找到这个
我正在开发Electron应用程序。 我有src文件夹中的几个JSON文件,需要在应用初始化(设置,配置等)期间将它们复制到用户文件夹中。 在开发人员模式下以及当我对JSON文件进行import时,它
我有一个上传文件的代码这里是代码: var oriPath = JSON.stringify(req.files.profilePicture); va
我尝试了所有这些步骤来将 bpmn 属性面板集成到本地主机中,例如 Integration of Properties panel in localhost . 此后我得到了未捕获错误:fs.read
我正在尝试在 nodejs 的帮助下获取文件内容fs.readFileSync()像这样将函数转换为字符串: let fileData = fs.readFileSync('./path, 'utf8
在我的 Node 应用程序中,我有一个 init 函数: function init() { if (!fs.existsSync("../schedule.json")) f
我在名为 data 的目录下创建了多个函数并用名为 generatedRandomData 的函数返回的一些随机数据填充它们。为了创建多个文件,我编写了这些函数: const createFile =
基本上,我使用 Node 的 FS 模块来读取和写入 JSON 文件。编写它完全可以正常工作,但由于某种原因,读取它会返回一个空字符串。 这个文件叫做records.js const dir = 's
我写了一个简单的 JS 对象,它具有函数 csvFileToArray。函数应返回已解析的 CSV 数组。 问题是我没有传递给 readFileSync 的匿名函数的输出。 test1 已正确登录到控
我想创建从数据库中获取数据的函数,例如 executeQuery(sql)。但我不想从这个函数返回任何 promise ,也不想传递任何回调函数。我只想返回查询的结果。 例如: var rows =
我有一个脚本,可以将数据从 API 写入某些文件。我有一个对象,其中包含每个文件的文件描述符: var csvFds = { 'file1' : null, 'file2' : nul
我正在使用 Insert-css 将一个 css 文件导入到我的 npm 模块中但我得到一个错误。 var fs = require('fs'); var inserCss = require('in
这个问题已经有答案了: Anonymous function passed to readFileSync is not returning any data (2 个回答) 已关闭 6 年前。 我正
我正在尝试使用 html-pdf Node 模块从 html 生成 pdf。我目前正在使用 cloud9 IDE 运行它。 我的代码是: var fs = require("fs"); var pdf
我正在尝试获取 webpack 和 mapbox-gl在 Meteor 系统中协同工作。我到处都查看了上述错误,但没有一个有效。这是我的 webpack 设置 { "root": "src",
我正在尝试通过我正在制作的 Chrome 应用程序将十六进制文件刷新到 Arduino。我使用了基本的 NodeJS 代码(如下所示),并使用 browserify 对其进行了转换,以便它可以在浏览器
为什么这段代码不起作用?如果我评论 fs.readFileSync('file.html');代码有效并创建文件“file.html”但如果我取消注释, fs.writeFileSync 将不起作用,
考虑以下 Node.js Javascript 程序: var fs = require('fs'); var encoding1='?'; var encoding2='?'; var a = fs
以下是 NodeJS 代码示例(同步版本): var fs = require('fs'); var path = './parseLogFiles/reports'; var counter = 0
我是一名优秀的程序员,十分优秀!