Methodenbeschreibung:
Erkennen Sie den wahren Weg.
Relative Pfade können mit „process.cwd“ aufgelöst werden.
Grammatik:
fs.realpath(path, [cache], [callback(err, gelösterPath)])
Da diese Methode zum fs-Modul gehört, muss das fs-Modul vor der Verwendung eingeführt werden (var fs= require(“fs“))
Empfangsparameter:
Pfad Pfad
Cache optional, der Zuordnungspfad eines Textes kann verwendet werden, um die Lösung eines bestimmten Pfads zu erzwingen oder zusätzliche fs.stat-Anforderungen zu vermeiden, um den tatsächlichen Pfad des Objekts zu kennen.
Rückruf
Fehler-Ausnahme
resolvedPath Echte Adresse
Beispiel:
var Cache = {'/etc':'/private/etc'};
fs.realpath('/etc/passwd', Cache, Funktion (err, gelösterPath) {
if (err) throw err;
console.log(resolvedPath);
});
Quellcode:
Code kopieren Der Code lautet wie folgt:
fs.realpath = Funktion realpath(p, Cache, cb) {
if (!util.isFunction(cb)) {
cb = MaybeCallback(cache);
Cache = null;
}
// mache p absolut
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 = {};
// aktuelle Zeichenposition in p
var pos;
// der bisherige Teilpfad, einschließlich eines abschließenden Schrägstrichs, falls vorhanden
var current;
// der Teilpfad ohne abschließenden Schrägstrich (außer beim Zeigen auf eine Wurzel)
var base;
// der Teilpfad, der in der vorherigen Runde gescannt wurde, mit Schrägstrich
var previous;
start();
Funktion start() {
// Wurzeln überspringen
var m = splitRootRe.exec(p);
pos = m[0].length;
aktuell = m[0];
Basis = m[0];
vorherige = '';
// Überprüfen Sie unter Windows, ob der Root vorhanden ist. Unter Unix besteht keine Notwendigkeit.
if (isWindows && !knownHard[base]) {
fs.lstat(base, function(err) {
if (err) return cb(err);
knownHard[base] = true;
LOOP();
});
} sonst {
process.nextTick(LOOP);
}
}
// Gehe den Pfad entlang und tausche verknüpfte Pfadteile gegen ihre echten aus
// Werte
Funktion LOOP() {
// anhalten, wenn über das Ende des Pfads hinaus gescannt wird
if (pos >= p.length) {
if (cache) zwischenspeicher[original] = p;
return cb(null, p);
}
// den nächsten Teil finden
nextPartRe.lastIndex = pos;
var result = nextPartRe.exec(p);
vorherige = aktuell;
current = result[0];
Basis = vorheriges Ergebnis[1];
pos = nextPartRe.lastIndex;
// fortfahren, wenn kein Symlink
if (knownHard[base] || (cache && Cache[base] === base)) {
return process.nextTick(LOOP);
}
if (cache && Object.prototype.hasOwnProperty.call(cache, base)) {
// bekannter symbolischer Link. Keine Notwendigkeit, es noch einmal zu sagen.
return gotResolvedLink(cache[base]);
}
return fs.lstat(base, gotStat);
}
Funktion gotStat(err, stat) {
if (err) return cb(err);
// Wenn es sich nicht um einen Symlink handelt, springe zum nächsten Pfadteil
if (!stat.isSymbolicLink()) {
knownHard[base] = true;
if (cache) Cache[base] = base;
return process.nextTick(LOOP);
}
// stat & den Link lesen, falls nicht vorher gelesen
// gotTarget aufrufen, sobald das Linkziel bekannt ist
// dev/ino gibt unter Windows immer 0 zurück, also überspringe die Prüfung.
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);
});
});
}
Funktion gotTarget(err, target, base) {
if (err) return cb(err);
var gelöstLink = pathModule.resolve( previous, target);
if (cache) zwischenspeicher[base] = gelöstLink;
gotResolvedLink(resolvedLink);
}
Funktion gotResolvedLink(resolvedLink) {
// Den Link auflösen und dann von vorne beginnen
p = pathModule.resolve(resolvedLink, p.slice(pos));
start();
}
};
Stellungnahme:Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn