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

我想知道如何require('/file.json')reafFile('/file.json', callback)readFileSync('/file.json', 'utf-8')彼此不同,也何时使用每个。

之所以我想知道这是因为我想发送一个文件从node.js到angular.js,我已经使用了三种方法,我注意到requireparsing文件,是完成的最短的方法我想要什么,在readFilereadFileSync我必须parsing文件。

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',callback)

在这种情况下,我们必须parsing文件

 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')

我们也得parsing这个文件

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

那么,什么样的方式更好,什么时候更好地使用它们呢,它们之间有什么不同呢?

要回答关于asynchronous的问题以及readFile和readFileSync之间的区别(在上面的注释中看起来像require需要处理):

readFile是一个asynchronous函数,意味着节点将启动函数,然后继续处理其他事情,而该函数正在等待返回一些数据(在你的情况下content.json的内容)。 一旦content.json被读入内存,一个callback函数将被执行并传递两个参数。 第一个错误,如果发生,第二个参数从您的文件的JSON数据。 然后,您可以在callback函数中处理这些数据。

另一方面,readFileSync将阻止(阻止)您的应用程序,直到从content.json读取数据为止。 这可能需要很长时间,取决于content.json的大小,许多人不希望在这个过程发生的时候撑起整个应用程序。 因此,asynchronous使用nodeJs的好处。

以上是对nodeJs如何工作的简化。 有关事件循环/事件队列的详细信息,我build议观看这个video。 nodeJs中的事件循环