Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript require(';file.json';)vs readFile(';/file.json';,回调)vs readFileSync(';/file.json';utf-8';)_Javascript_Json_Node.js - Fatal编程技术网

Javascript require(';file.json';)vs readFile(';/file.json';,回调)vs readFileSync(';/file.json';utf-8';)

Javascript require(';file.json';)vs readFile(';/file.json';,回调)vs readFileSync(';/file.json';utf-8';),javascript,json,node.js,Javascript,Json,Node.js,我想知道require('/file.json'),reafFile('/file.json',callback)和readFileSync('/file.json',utf-8')之间有什么不同,以及何时使用它们 我之所以想知道这一点,是因为我想将一个文件从node.js发送到angular.js,我使用了这三种方法,并且我注意到,require解析文件,是完成我想要的事情的最短方法,无论是readFile还是readFileSync我都必须解析文件 A)需要('/file.json') 要使

我想知道
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)重档案('/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工作原理的简化。有关事件循环/事件队列的详细信息,我建议观看此视频。

获取json时,require只是rfs+json.parse+缓存。如果你想使用异步,这里只有一个选项。是什么让asyc这么好@Dandavisf适用于任何寻求基准的人-在这里: