javascript - 需要 ('file.json' ) vs readFile ('/file.json' , 回调) vs readFileSync ('/file.json' , 'utf-8' )

标签 javascript json node.js

我想知道 require('/file.json')reafFile('/file.json', callback)readFileSync 是怎样的('/file.json', 'utf-8') 彼此不同,以及何时使用它们。

我想知道这个的原因是因为我想从 node.js 发送一个文件到 angular.js,我已经使用了这三种方法并且我注意到 require 解析该文件是完成我想要的最短方法,在 readFilereadFileSync 中我都必须解析该文件。

A) 要求('/file.json')

要使用这种方式,我们只需执行以下操作:

var client_content = require( './client/content.json' );

app.get( '/api/v1/content', function ( request, response ) {

    response.setHeader( 'Content-Type', 'application/json' );
    response.json( client_content );

} );

B) reafFile('/file.json', 回调)

在这种情况下我们必须解析文件

app.get( '/api/v1/content', function ( request, response ) {

    response.setHeader( 'Content-Type', 'application/json' );
    readJSONFile( './client/content.json', function ( err, json ) {
        if ( err ) {
            throw err;
        }
        return response.json( json );
    } );

} );

function readJSONFile( filename, callback ) {
    require( "fs" ).readFile( filename, function ( err, data ) {
        if ( err ) {
            callback( err );
            return;
        }
        try {

            callback( null, JSON.parse( data ) );

        } catch ( exception ) {
            callback( exception );
        }
    } );
}

C) readFileSync('/file.json', 'utf-8')

我们也必须解析文件

app.get( '/content', function ( request, response ) {
    response.json(JSON.parse(require('fs').readFileSync('./client/content.json', 'utf8')));
}

那么,什么方法更好,什么时候使用它们更好?它们之间有什么区别?

最佳答案

要回答您关于异步的问题以及 readFile 和 readFileSync 之间的区别(看起来 require 在上面的评论中得到了处理):

readFile 是一个异步函数,这意味着 Node 将启动该函数,然后在该函数等待返回一些数据(在您的情况下为 content.json 的内容)的同时继续处理应用程序中的其他内容。一旦 content.json 被读入内存,回调函数将被执行并传递两个参数。如果发生错误,第一个是错误,第二个参数是文件中的 json 数据。然后,您可以根据需要在回调函数中处理该数据。

另一方面,readFileSync 将阻止(阻止)您的应用程序处理任何其他内容,直到从 content.json 中读取数据。这可能需要很长时间,具体取决于 content.json 的大小,并且许多人不希望在此过程中暂停他们的整个应用程序。因此异步使用 nodeJs 的优势。

以上是对 nodeJs 工作原理的简化。有关事件循环/事件队列的详细信息,我建议观看此视频。 Event Loop in nodeJs

关于javascript - 需要 ('file.json' ) vs readFile ('/file.json' , 回调) vs readFileSync ('/file.json' , 'utf-8' ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33713024/

相关文章:

node.js - 范围/角色声明在客户端凭据访问 token 中不可用

java - @JSonIgnore 注释的等效代码设置是什么?

c# - JSON 数组到 Entity Framework Core 非常慢?

javascript - 扩展 expressjs 资源属性

javascript - 单击内部标签时将类添加到 li

javascript - JSON.parse 或替代库也将解析日期

javascript - socket.io 自定义发出事件不起作用

javascript - Angular 2 对如此多的 javascript 文件的依赖是否会妨碍/影响其性能?

javascript - 将参数传递给回调函数而不更改方法(Siesta 测试命名空间)

javascript - 在文本中查找关键字