我想知道require('/file.json')
、reafFile('/file.json', callback)
和readFileSync('/file.json', 'utf-8')
彼此有何不同,以及何时使用它们。
我之所以想知道这一点,是因为我想将文件从node.js发送到angular.js,我使用了三种方法,我注意到require
解析文件,这是完成我想要的任务的最短方法,在readFile
和readFileSync
中,我都必须解析文件。
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)repaFile('/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之间的区别的问题(在上面的评论中似乎需要处理):
readFile是一个异步函数,这意味着节点将启动该函数,然后在该函数等待返回一些数据(在您的情况下是content.json的内容)时继续处理应用程序中的其他事情。一旦content.json被读取到内存中,就会执行一个回调函数并传递两个参数。第一个是错误(如果有),第二个参数是文件中的json数据。然后,您可以在回调函数中按照自己的意愿处理这些数据。
另一方面,readFileSync将阻止(阻止)您的应用程序处理任何其他内容,直到从content.json读取数据为止。这可能需要很长时间,具体取决于content.json的大小,许多人不想在这个过程中阻止整个应用程序。因此异步使用nodeJ具有优势。
以上是对nodeJ工作方式的简化。有关事件循环/事件队列的详细信息,我建议观看此视频。nodeJs 中的事件循环