javascript - 需要了解NodeJS中ReadWrite的流程

标签 javascript node.js

我只是在 NodeJS 上尝试一些代码,我是 NodeJS 的新手。 我写了以下代码块。

 var fs = require('fs'),
    os = require('os');

var filename = 'Server.ini';
var serverData = os.hostname() + "\n" + os.platform() + "\n" + os.type() + "\n";

fs.existsSync(filename, function(exists) {
    if(exists) {
        console.log("1. " + filename + " file found. Server needs to be updated.")

        fs.unlinkSync(filename, function(error) {
            if(error) throw error;
            console.log("2. " + filename + " is been unlinked from server.");
        });

    } else {
        console.log("1. " + filename + " not found.");
        console.log("2. Server needs to be configured.");
    }
});

fs.openSync(filename, "w+", function(error) {
    if(error) throw error;
    console.log("3. " + filename + " file is been locked.");
}); 

fs.writeFileSync(filename, serverData, function(error) {
    if(error) throw error;
    console.log("4. " + filename + " is now updated.");

    fs.readFileSync(filename, 'utf-8', function(error, data) {
        if(error) throw error;

        console.log("5. Reading " + filename + " file");
        console.log("6. " + filename + " contents are below\n");
        console.log(data);
        console.log("-------THE END OF FILE-------");
    });
});

我已经编辑了代码并添加了同步,但现在它给我以下错误:

D:\NodeJS\fs>node eg5.js

buffer.js:382
      throw new Error('Unknown encoding');
            ^
Error: Unknown encoding
    at Buffer.write (buffer.js:382:13)
    at new Buffer (buffer.js:261:26)
    at Object.fs.writeFileSync (fs.js:758:12)
    at Object.<anonymous> (D:\NodeJS\fs\eg5.js:28:4)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.runMain (module.js:492:10)
    at process.startup.processNextTick.process._tickCallback (node.js:244:9)

D:\NodeJS\fs>

关于 utf8,我的代码有什么问题吗!

最佳答案

您正在调用 fs object 的异步版本并传递回调。

同步版本也存在。例如,参见:Check synchronously if file/directory exists in Node.js

在编辑同步之前的原始代码中:

    fs.writeFile(filename, serverData, function(error) {
        ...
    });

    fs.readFile(filename, "utf-8", function(error, data) {

该调用的第二个参数是回调。它将异步运行存在检查并在完成时调用您传入的函数。 fs.readfile 将在 writeFile 完成之前立即被调用。

如果您的目标是编写 Node 异步代码,则将读取调用嵌套在写入回调中。如果您的目标是编写简单的同步脚本,则切换到同步调用并编写平面代码。

如果您使用 node.js 编写服务器代码,那么使用所有异步 I/O 调用至关重要,因为它是循环中的一个线程。如果您只是像上面那样编写脚本并希望它在同步顺序方面简单,请使用 API 的同步版本。

由于 Node 应该是异步的,因此同步调用是异常(exception),因此约定是以同步结束函数名称。因此功能类似于 fs.existsSync

关于javascript - 需要了解NodeJS中ReadWrite的流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16481890/

相关文章:

javascript - 如何基于 ACL 对象渲染 React 组件?

javascript - 在 React 中动态呈现外部 HTML/React 组件

javascript - Protractor 运行后出现 uncaughtException

javascript - jQuery 未绑定(bind)到表单,

javascript - 刷新表格而不刷新整个页面以显示更新的数据

node.js - 安装任何包时 npm rollbackFailedOptional 错误

node.js - 关于更新我的 node.js 游戏的问题

javascript - 如何使用 Electron 应用程序关闭文件

javascript - 使用 Express NodeJS Rest api 样板创建新路线

javascript - 充满 bool 值的 Javascript 对象的保留大小