Methode Beschreibung:
Holen Sie sich den wirklichen Weg.
Relative Pfade können mit Process.cwd aufgelöst werden.
Grammatik:
Die Codekopie lautet wie folgt:
FS. RealPath (Pfad, [Cache], [Callback (err, Auflösungspath)])
Da diese Methode zum FS -Modul gehört, muss das FS -Modul vor der Verwendung eingeführt werden (var fs = require ("fs"))
Parameter empfangen:
Pfad
Cache Optional kann ein buchstäblicher Pfad verwendet werden, um einen bestimmten Pfad zu erzwingen, um zusätzliche Fs.Stat zu lösen oder zu vermeiden, dass das reale Pfadobjekt kennen.
Callback -Rückruf
Irren Ausnahme
RealedPath Real Adresse
Beispiel:
Die Codekopie lautet wie folgt:
var cache = {'/etc': '/privat/etc'};
fs.realPath ('/etc/passwd', cache, function (err, reparedPath) {
Wenn (err) erröste;
console.log (AuflösungsPath);
});
Quellcode:
Die Codekopie lautet wie folgt:
fs.realPath = function RealPath (p, cache, cb) {
if (! util.isfunction (cb)) {
CB = MaybeCallback (Cache);
cache = null;
}
// p ist 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,
seelinks = {},
bekanntHard = {};
// aktuelle Zeichenposition in p
var pos;
// der teilweise Pfad bisher, einschließlich eines nachverfolgenden Schrägs, falls vorhanden
var Strom;
// der Teilweg ohne nachfolgende Schrägstrich (außer wenn auf eine Wurzel zeigt)
var Basis;
// Der teilweise Pfad, der in der vorherigen Runde mit Schrägstrich gescannt wurde
var vorher;
Start();
Funktion start () {
// Wurzeln überspringen
var m = splitrootre.exec (p);
pos = m [0] .Length;
Strom = m [0];
Basis = m [0];
vorher = '';
// Unter Windows überprüfen Sie, ob das Root existiert. Auf Unix gibt es keine Notwendigkeit.
if (isWindows &&! Bekannte Hard [Basis]) {
fs.lstat (Basis, Funktion (err) {
wenn (err) cb zurückgeben (err);
bekannthard [Basis] = wahr;
SCHLEIFE();
});
} anders {
process.nextTick (Schleife);
}
}
// Gehen Sie den Pfad hinunter und tauschen Sie verknüpfte Pfade gegen ihre Realität aus
// Werte
Funktionsloop () {
// Stoppen Sie, wenn Sie über das Ende des Pfades gescannt sind
if (pos> = p.Length) {
if (cache) cache [original] = p;
return cb (null, p);
}
// den nächsten Teil finde
NextParre.LastIndex = pos;
var result = nextPartre.exec (p);
vorher = Strom;
Strom += Ergebnis [0];
Basis = vorheriges + Ergebnis [1];
pos = NextParre.lastIndex;
// Fahren Sie weiter, wenn nicht ein Symlink
if (bekannthard [Base] || (Cache && Cache [Basis] === Basis)) {
return process.nextTick (Schleife);
}
if (cache && object.prototype.hasownProperty.call (cache, base)) {
// Bekannte symbolische Verbindung. Keine Notwendigkeit, wieder zu stat.
return gotResolvedLink (Cache [Basis]);
}
return fs.lstat (Basis, Gotstat);
}
Funktion gotStat (err, stat) {
wenn (err) cb zurückgeben (err);
// Wenn nicht ein Symlink, überspringen Sie zum nächsten Pfadteil
if (! stat.issymbolicLink ()) {
bekannthard [Basis] = wahr;
if (cache) cache [base] = base;
return process.nextTick (Schleife);
}
// stat und lesen Sie den Link, falls dies nicht zuvor gelesen wird
// Ruf Gottarget an, sobald das Linkziel bekannt ist
// Dev/Ino gibt immer 0 unter Windows zurück, also überspringen Sie die Überprüfung.
if (! isWindows) {
var id = stat.dev.toString (32) + ':' + stat.ino.toString (32);
if (SeaDlinks.hasownProperty (id)) {
GOTTARGET (NULL, SEELINKS [ID], Basis);
}
}
fs.Stat (Basis, Funktion (err) {
wenn (err) cb zurückgeben (err);
fs.readlink (Basis, Funktion (Err, Ziel) {
if (! iswindows) seelinks [id] = Ziel;
Gottarget (err, target);
});
});
}
Funktion gottarget (err, target, base) {
wenn (err) cb zurückgeben (err);
var respedLink = pathmodule.resolve (vorher, Ziel);
if (cache) cache [Basis] = Auflösungen;
gotResolvedLink (Auflösungen);
}
Funktion gotResolvedLink (aufgelöst) {
// den Link auflösen und dann von vorne beginnen
p = pathmodule.resolve (Auflösungen, p.slice (pos));
Start();
}
};