require('file.json')vs readFile('/ file.json',callback)vs readFileSync('/ file.json','utf-8')

时间:2015-11-14 20:32:26

标签: 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')));
}

那么,哪种方式更好,何时更好地使用它们?它们之间有什么区别?

1 个答案:

答案 0 :(得分:1)

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

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

另一方面,

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

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