Rumah >hujung hadapan web >tutorial js >Arahan untuk menggunakan kaedah fs.realpath dalam node.js_node.js

Arahan untuk menggunakan kaedah fs.realpath dalam node.js_node.js

WBOY
WBOYasal
2016-05-16 16:26:401354semak imbas

Penerangan kaedah:

Dapatkan jalan sebenar.

Laluan relatif boleh diselesaikan menggunakan process.cwd.

Tatabahasa:

Salin kod Kod adalah seperti berikut:

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

Memandangkan kaedah ini tergolong dalam modul fs, modul fs perlu diperkenalkan sebelum digunakan (var fs= require(“fs”) )

Terima parameter:

Laluan laluan

cache                                                                                                                                                                                                                                           ’ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ Secara pilihan, laluan yang dipetakan secara literal boleh digunakan untuk memaksa laluan tertentu diselesaikan atau untuk mengelakkan keperluan untuk mengetahui laluan fs.stat tambahan.

panggilan balik                                                                              

err Pengecualian

resolvedPath alamat sebenar

Contoh:

Salin kod Kod adalah seperti berikut:
var cache = {'/etc':'/private/etc'};
fs.realpath('/etc/passwd', cache, fungsi (err, resolvedPath) {
jika (err) membuang err;
console.log(resolvedPath);
});

Kod sumber:

Salin kod Kod adalah seperti berikut:

fs.realpath = fungsi realpath(p, cache, cb) {
  jika (!util.isFunction(cb)) {
    cb = maybeCallback(cache);
    cache = null;
  }
  // jadikan p adalah mutlak
  p = pathModule.resolve(p);
  if (cache && Object.prototype.hasOwnProperty.call(cache, p)) {
    return process.nextTick(cb.bind(null, null, cache[p]));
  }
  var asal = p,
      seenLinks = {},
      dikenali Keras = {};
  // kedudukan aksara semasa dalam p
  var pos;
  // laluan separa setakat ini, termasuk garis miring mengekor jika ada
  var semasa;
  // laluan separa tanpa garis miring mengekor (kecuali apabila menunjuk pada akar)
  asas var;
  // laluan separa yang diimbas dalam pusingan sebelumnya, dengan garis miring
  var sebelumnya;
  mula ();
  fungsi mula() {
    // Langkau ke atas akar
    var m = splitRootRe.exec(p);
    pos = m[0].panjang;
    semasa = m[0];
    asas = m[0];
    sebelumnya = '';
    // Pada tingkap, semak sama ada akarnya wujud. Pada unix tidak perlu.
    if (isWindows && !knownHard[base]) {
      fs.lstat(asas, fungsi(err) {
        jika (err) kembalikan cb(err);
        dikenaliKeras[asas] = benar;
        LOOP();
      });
    } lain {
      process.nextTick(LOOP);
    }
  }
  // berjalan di laluan itu, menukar bahagian laluan yang dipautkan dengan
sebenar mereka   // nilai
  fungsi LOOP() {
    // berhenti jika diimbas melepasi hujung laluan
    jika (pos >= p.panjang) {
      jika (cache) cache[asal] = p;
      kembalikan cb(null, p);
    }
    // cari bahagian seterusnya
    nextPartRe.lastIndex = pos;
    var result = nextPartRe.exec(p);
    sebelumnya = semasa;
    semasa = hasil[0];
    asas = hasil sebelumnya[1];
    pos = nextPartRe.lastIndex;
    // teruskan jika bukan symlink
    if (knownHard[base] || (cache && cache[base] === base)) {
      proses kembali.nextTick(LOOP);
    }
    if (cache && Object.prototype.hasOwnProperty.call(cache, base)) {
      // pautan simbolik yang diketahui. tak perlu stat lagi.
      kembalikan gotResolvedLink(cache[base]);
    }
    kembalikan fs.lstat(asas, gotStat);
  }
  fungsi gotStat(err, stat) {
    jika (err) kembalikan cb(err);
    // jika bukan pautan sym, langkau ke bahagian laluan seterusnya
    jika (!stat.isSymbolicLink()) {
      dikenaliKeras[asas] = benar;
      jika (cache) cache[base] = base;
      proses kembali.nextTick(LOOP);
    }
    // stat & baca pautan jika tidak dibaca sebelum ini
    // panggil gotTarget sebaik sahaja sasaran pautan diketahui
    // dev/ino sentiasa mengembalikan 0 pada tingkap, jadi langkau semak itu.
    jika (!isWindows) {
      var id = stat.dev.toString(32) ':' stat.ino.toString(32);
      jika (seenLinks.hasOwnProperty(id)) {
        return gotTarget(null, seenLinks[id], base);
      }
    }
    fs.stat(asas, fungsi(err) {
      jika (err) kembalikan cb(err);
      fs.readlink(asas, fungsi(err, target) {
        jika (!isWindows) dilihatPautan[id] = sasaran;
        gotTarget(err, target);
      });
    });
  }
  fungsi gotTarget(err, target, base) {
    jika (err) kembalikan cb(err);
    var resolvedLink = pathModule.resolve(sebelumnya, sasaran);
    jika (cache) cache[base] = solvedLink;
    gotResolvedLink(resolvedLink);
  }
  fungsi gotResolvedLink(resolvedLink) {
    // selesaikan pautan, kemudian mulakan semula
    p = pathModule.resolve(resolvedLink, p.slice(pos));
    mula ();
  }
};
Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn