Penerangan kaedah:
Dapatkan jalan sebenar.
Laluan relatif boleh diselesaikan menggunakan process.cwd.
Tatabahasa:
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:
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 ();
}
};