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,我已经使用了三种方法,我注意到require
parsing文件,是完成的最短的方法我想要什么,在readFile
和readFileSync
我必须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中的事件循环