使用NodeJs在内存中caching整个文件

我有一个相当小的文件(大约几百千字节),我想要在内存中直接访问整个代码的执行。

我不清楚NodeJ的内部,所以我问fs open是否足够,或者我必须读取所有文件并复制到一个Buffer

基本上,你需要使用fs模块的readFile或者readFileSync函数。 它们返回给定文件的完整内容,但是它们的行为不同(asynchronous与同步)。

如果阻止Node.js(例如启动应用程序)不是问题,那么可以使用同步版本,这很简单:

 var fs = require('fs'); var data = fs.readFileSync('/etc/passwd'); 

如果你需要去asynchronous,代码是这样的:

 var fs = require('fs'); fs.readFile('/etc/passwd', function (err, data ) { // ... }); 

请注意,无论哪种情况,您都可以给options对象作为第二个参数,例如指定要使用的编码。 如果您省略编码,则返回原始缓冲区:

 var fs = require('fs'); fs.readFile('/etc/passwd', { encoding: 'utf8' }, function (err, data ) { // ... }); 

有效的编码是utf8asciiutf16leucs2base64hex 。 还有一个binary编码,但不推荐使用,不应再使用。 您可以在相应的文档中find更多关于如何处理编码和缓冲区的细节。

一样容易

 var buffer = fs.readFileSync(filename); 

使用节点0.12,现在可以同步执行此操作:

  var fs = require('fs'); var path = require('path'); // Buffer mydata var BUFFER = bufferFile('../public/mydata'); function bufferFile(relPath) { return fs.readFileSync(path.join(__dirname, relPath)); // zzzz.... } 

fs是文件系统。 readFileSync()返回一个缓冲区或string,如果你问。

fs正确地假设相对path是一个安全问题。 path是一个解决方法。

要作为string加载,请指定编码:

 return readFileSync(path,{ encoding: 'utf8' });