检查NodeJ中是否存在文件的最快方法

Lit*_*yte 34 performance node.js

我正在节点和我的onRequest监听器中构建一个超级简单的服务器我正在尝试确定是否应该根据路径提供静态文件(磁盘外)或某些json(可能是从mongo中提取)request.url.

目前我正在尝试首先统计文件(因为我在其他地方使用mtime),如果没有失败,那么我从磁盘读取内容.像这样的东西:

fs.stat(request.url.pathname, function(err, stat) {
    if (!err) {
        fs.readFile(request.url.pathname, function( err, contents) {
            //serve file
        });
    }else {
        //either pull data from mongo or serve 404 error
    }
});
Run Code Online (Sandbox Code Playgroud)

除了cacheing的结果fs.statrequest.url.pathname,有没有东西可以加速这一检查呢?例如,是否可以快速查看是否fs.readFile出错而不是stat?或者用fs.createReadStream而不是fs.readFile?或者我可以使用某些东西来检查文件child_process.spawn吗?基本上我只是想确保在将请求发送到mongo以获取数据时,我不会花费任何额外的时间搞乱/ fileio ...

谢谢!

fen*_*ent 58

var fs = require('fs');

fs.exists(file, function(exists) {
  if (exists) {
    // serve file
  } else {
    // mongodb
  }
});
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考,`path.exists()`已在Node的更高版本中弃用.现在它是`fs.exists()`. (13认同)
  • 请注意``file`实际上可以是目录,符号链接,管道等.要查找文件,你可以使用类似`fs.stat(file,function(err,stats){if(!err && stats.isFile) ()){// serve} else {// something else}});`但即使这并不能保证你实际上可以读取该文件.权限可能有误,或者在您实际阅读之前可能只删除了文件.根据上下文,解决问题的一种方法可能是尝试读取文件,然后在失败时执行其他操作. (7认同)