教程
node.js中的dns.getServers方法使用说明 node.js中的events.EventEmitter.listenerCount方法使用说明 node.js中的path.resolve方法使用说明 node.js中的path.sep方法使用说明 node.js中的path.normalize方法使用说明 node.js中的path.join方法使用说明 node.js中的path.isAbsolute方法使用说明 node.js中的path.extname方法使用说明 node.js中的path.dirname方法使用说明 node.js中的path.delimiter方法使用说明 node.js中的path.basename方法使用说明 node.js中的console.timeEnd方法使用说明 node.js中的console.time方法使用说明 node.js中的console.trace方法使用说明 node.js中的console.info方法使用说明 node.js中的console.warn方法使用说明 node.js中的console.log方法使用说明 node.js中的console.error方法使用说明 node.js中的console.dir方法使用说明 node.js中的console.assert方法使用说明 node.js中的url.format方法使用说明 node.js中的url.parse方法使用说明 node.js中的url.resolve方法使用说明 node.js中的querystring.parse方法使用说明 node.js中的querystring.stringify方法使用说明 node.js中的querystring.escape方法使用说明 node.js中的querystring.unescape方法使用说明 node.js中的events.emitter.removeAllListeners方法使用说明 node.js中的events.emitter.listeners方法使用说明 node.js中的events.emitter.removeListener方法使用说明 node.js中的emitter.emit方法使用说明 node.js中的events.emitter.once方法使用说明 node.js中的emitter.on方法使用说明 node.js中的http.request.end方法使用说明 node.js中的buffer.write方法使用说明 node.js中的buffer.slice方法使用说明 node.js中的buffer.Buffer.byteLength方法使用说明 node.js中的buffer.Buffer.isBuffer方法使用说明 node.js中的buffer.Buffer.isEncoding方法使用说明 node.js中的buffer.toString方法使用说明 node.js中的buffer.toJSON方法使用说明 node.js中的buffer.length方法使用说明 node.js中的buffer.fill方法使用说明 node.js中的buffer.copy方法使用说明 node.js中的http.request方法使用说明 node.js中的http.response.removeHeader方法使用说明 node.js中的http.response.setHeader方法使用说明 node.js中的http.response.end方法使用说明 node.js中的http.response.write方法使用说明 node.js中的http.response.getHeader方法使用说明 node.js中的http.response.writeHead方法使用说明 node.js中的http.response.addTrailers方法使用说明 node.js中的fs.writeFile方法使用说明 node.js中的fs.writeFileSync方法使用说明 node.js中的fs.writeFile方法使用说明 node.js中的http.createServer方法使用说明 node.js中的http.get方法使用说明 node.js中的http.createClient方法使用说明 node.js中的fs.write方法使用说明 node.js中的fs.writeSync方法使用说明 node.js中的fs.fsyncSync方法使用说明 node.js中的fs.ftruncate方法使用说明 node.js中的fs.fsync方法使用说明 node.js中的fs.unlink方法使用说明 node.js中的fs.unlinkSync方法使用说明 node.js中的fs.truncate方法使用说明 node.js中的fs.truncateSync方法使用说明 node.js中的fs.utimes方法使用说明 node.js中的fs.utimesSync方法使用说明 node.js中的fs.symlink方法使用说明 node.js中的fs.symlinkSync方法使用说明 node.js中的fs.link方法使用说明 node.js中的fs.linkSync方法使用说明 node.js中的fs.readFile方法使用说明 node.js中的fs.readFileSync方法使用说明 node.js中的fs.fstat方法使用说明 node.js中的fs.fstatSync方法使用说明 node.js中的require使用详解 node.js中的fs.lstat方法使用说明 node.js中的fs.lstatSync方法使用说明 node.js中的fs.rename方法使用说明 node.js中的fs.renameSync方法使用说明 node.js中的fs.realpath方法使用说明 node.js中的fs.realpathSync方法使用说明 node.js中的fs.stat方法使用说明 node.js中的fs.statSync方法使用说明 node.js中的fs.lchmod方法使用说明 node.js中的fs.lchmodSync方法使用说明 node.js中的fs.fchmod方法使用说明 node.js中的fs.fchmodSync方法使用说明 node.js中的fs.lchown方法使用说明 node.js中的fs.lchownSync方法使用说明 node.js中的fs.chown方法使用说明 node.js中的fs.chownSync方法使用说明 node.js中的fs.fchown方法使用说明 node.js中的fs.fchownSync方法使用说明 node.js中的fs.rmdir方法使用说明 node.js中的fs.rmdirSync方法使用说明 node.js中的fs.mkdir方法使用说明 node.js中的fs.mkdirSync方法使用说明 node.js中的fs.read方法使用说明 node.js中的fs.readSync方法使用说明 node.js中的fs.readlink方法使用说明 node.js中的fs.readlinkSync方法使用说明 node.js中的fs.readdir方法使用说明 node.js中的fs.readdirSync方法使用说明 node.js中的fs.close方法使用说明 node.js中的fs.closeSync方法使用说明 node.js中的fs.open方法使用说明 node.js中的fs.openSync方法使用说明 node.js中的fs.exists方法使用说明 node.js中的fs.existsSync方法使用说明 node.js中的fs.futimes方法使用说明 node.js中的fs.futimesSync方法使用说明 node.js中的fs.createWriteStream方法使用说明 node.js中的fs.createReadStream方法使用说明 node.js中的fs.appendFileSync方法使用说明 node.js中的fs.appendFile方法使用说明 node.js中的fs.chmod方法使用说明 node.js中的fs.chmodSync方法使用说明

发布于 2016-08-21 06:43:06 | 207 次阅读 | 评论: 0 | 来源: 网友投递

这篇文章主要介绍了node.js中的fs.realpath方法使用说明,本文介绍了fs.realpath的方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下

方法说明:

获取真实路径。

可以使用process.cwd解决相对路径。

语法:



fs.realpath(path, [cache], [callback(err , resolvedPath)])

由于该方法属于fs模块,使用前需要引入fs模块(var fs= require(“fs”) )

接收参数:

path                             路径

cache                           可选,一个文字的映射路径可用于强制一个特定的路径解决或避免额外的fs.stat需要知道真正的路径对象。

callback                       回调

err                                异常

resolvedPath               真实地址

例子:



var cache = {'/etc':'/private/etc'};

fs.realpath('/etc/passwd', cache, function (err, resolvedPath) {

  if (err) throw err;

  console.log(resolvedPath);

});

源码:



fs.realpath = function realpath(p, cache, cb) {

  if (!util.isFunction(cb)) {

    cb = maybeCallback(cache);

    cache = null;

  }

  // make p is absolute

  p = pathModule.resolve(p);

  if (cache && Object.prototype.hasOwnProperty.call(cache, p)) {

    return process.nextTick(cb.bind(null, null, cache[p]));

  }

  var original = p,

      seenLinks = {},

      knownHard = {};

  // current character position in p

  var pos;

  // the partial path so far, including a trailing slash if any

  var current;

  // the partial path without a trailing slash (except when pointing at a root)

  var base;

  // the partial path scanned in the previous round, with slash

  var previous;

  start();

  function start() {

    // Skip over roots

    var m = splitRootRe.exec(p);

    pos = m[0].length;

    current = m[0];

    base = m[0];

    previous = '';

    // On windows, check that the root exists. On unix there is no need.

    if (isWindows && !knownHard[base]) {

      fs.lstat(base, function(err) {

        if (err) return cb(err);

        knownHard[base] = true;

        LOOP();

      });

    } else {

      process.nextTick(LOOP);

    }

  }

  // walk down the path, swapping out linked pathparts for their real

  // values

  function LOOP() {

    // stop if scanned past end of path

    if (pos >= p.length) {

      if (cache) cache[original] = p;

      return cb(null, p);

    }

    // find the next part

    nextPartRe.lastIndex = pos;

    var result = nextPartRe.exec(p);

    previous = current;

    current += result[0];

    base = previous + result[1];

    pos = nextPartRe.lastIndex;

    // continue if not a symlink

    if (knownHard[base] || (cache && cache[base] === base)) {

      return process.nextTick(LOOP);

    }

    if (cache && Object.prototype.hasOwnProperty.call(cache, base)) {

      // known symbolic link. no need to stat again.

      return gotResolvedLink(cache[base]);

    }

    return fs.lstat(base, gotStat);

  }

  function gotStat(err, stat) {

    if (err) return cb(err);

    // if not a symlink, skip to the next path part

    if (!stat.isSymbolicLink()) {

      knownHard[base] = true;

      if (cache) cache[base] = base;

      return process.nextTick(LOOP);

    }

    // stat & read the link if not read before

    // call gotTarget as soon as the link target is known

    // dev/ino always return 0 on windows, so skip the check.

    if (!isWindows) {

      var id = stat.dev.toString(32) + ':' + stat.ino.toString(32);

      if (seenLinks.hasOwnProperty(id)) {

        return gotTarget(null, seenLinks[id], base);

      }

    }

    fs.stat(base, function(err) {

      if (err) return cb(err);

      fs.readlink(base, function(err, target) {

        if (!isWindows) seenLinks[id] = target;

        gotTarget(err, target);

      });

    });

  }

  function gotTarget(err, target, base) {

    if (err) return cb(err);

    var resolvedLink = pathModule.resolve(previous, target);

    if (cache) cache[base] = resolvedLink;

    gotResolvedLink(resolvedLink);

  }

  function gotResolvedLink(resolvedLink) {

    // resolve the link, then start over

    p = pathModule.resolve(resolvedLink, p.slice(pos));

    start();

  }

};

最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务