Node.js: Holen Sie sich den Pfad aus der Anfrage

Lesezeit: 3 Minuten

Benutzer-Avatar
Nabil Djarallah

Ich habe einen Dienst namens “localhost:3000/returnStat”, der einen Dateipfad als Parameter annehmen sollte. Zum Beispiel „/BackupFolder/toto/tata/titi/myfile.txt“.

Wie kann ich diesen Dienst in meinem Browser testen? Wie kann ich diese Anfrage beispielsweise mit Express formatieren?

exports.returnStat = function(req, res) {

var fs = require('fs');
var neededstats = [];
var p = __dirname + "https://stackoverflow.com/" + req.params.filepath;

fs.stat(p, function(err, stats) {
    if (err) {
        throw err;
    }
    neededstats.push(stats.mtime);
    neededstats.push(stats.size);
    res.send(neededstats);
});
};

  • Ja, erstellen Sie einen REST-Aufruf, siehe diesen Artikel erichonorez.wordpress.com/2013/02/10/…

    – letzter Junge

    21. September 2013 um 10:28 Uhr


  • und mit dem Browser, nur für schnelle Tests

    – Nabil Djarallah

    21. September 2013 um 11:04 Uhr

Benutzer-Avatar
Gaurav

var http = require('http');
var url  = require('url');
var fs   = require('fs');

var neededstats = [];

http.createServer(function(req, res) {
    if (req.url == '/index.html' || req.url == "https://stackoverflow.com/") {
        fs.readFile('./index.html', function(err, data) {
            res.end(data);
        });
    } else {
        var p = __dirname + "https://stackoverflow.com/" + req.params.filepath;
        fs.stat(p, function(err, stats) {
            if (err) {
                throw err;
            }
            neededstats.push(stats.mtime);
            neededstats.push(stats.size);
            res.send(neededstats);
        });
    }
}).listen(8080, '0.0.0.0');
console.log('Server running.');

Ich habe Ihren Code nicht getestet, aber andere Dinge funktionieren

Wenn Sie die Pfadinformationen von der Anforderungs-URL abrufen möchten

 var url_parts = url.parse(req.url);
 console.log(url_parts);
 console.log(url_parts.pathname);

1.Wenn Sie die URL-Parameter immer noch nicht lesen können, korrigieren Sie einfach Ihren Dateipfad in meinem Beispiel. Wenn Sie index.html im selben Verzeichnis wie Servercode platzieren, würde es funktionieren …

2. Wenn Sie eine große Ordnerstruktur haben, die Sie mit node hosten möchten, würde ich Ihnen raten, ein Framework wie expressjs zu verwenden

Wenn Sie eine Rohlösung für den Dateipfad wünschen

var http = require("http");
var url = require("url");

function start() {
function onRequest(request, response) {
    var pathname = url.parse(request.url).pathname;
    console.log("Request for " + pathname + " received.");
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write("Hello World");
    response.end();
}

http.createServer(onRequest).listen(8888);
console.log("Server has started.");
}

exports.start = start;

Quelle : http://www.nodebeginner.org/

  • Mein Code funktioniert, aber wie kann ich den Dateipfad abrufen (req-Parameter wie ‘/BackupFolder/toto/tata/titi/myfile.txt’)

    – Nabil Djarallah

    21. September 2013 um 11:02 Uhr

  • Notiz, url.parse() wird zugunsten von abgelehnt new URL()aber letzteres schlägt fehl, wenn Sie es bestehen '/' =/

    – Klesun

    10. Mai 2021 um 20:53 Uhr

einfach anrufen req.url. das sollte die arbeit machen. Sie erhalten so etwas wie /something?bla=foo

  • Der Pfad in Ihrem Beispiel ist /something.

    – Patrick Fischer

    14. Mai 2014 um 4:37 Uhr

  • verwenden req.url.match('^[^?]*')[0] nur den Weg zeigen

    – epegzz

    30. Mai 2015 um 15:07 Uhr

  • Ich habe das Gefühl, dass es ein eingebautes gibt, das keine chaotische Regex erfordert

    – Jemand

    19. Februar 2021 um 23:54 Uhr

Benutzer-Avatar
kumbhani bhavesh

Sie können dies verwenden app.js Datei .

var apiurl = express.Router();
apiurl.use(function(req, res, next) {
    var fullUrl = req.protocol + '://' + req.get('host') + req.originalUrl;
    next();
});
app.use("https://stackoverflow.com/", apiurl);

  • Verwenden hostname nicht Gastgeber.

    – Melroy van den Berg

    5. Mai 2021 um 11:17 Uhr

req.protocol + '://' + req.get('host') + req.originalUrl

oder

req.protocol + '://' + req.headers.host + req.originalUrl // Ich mag diesen, da er vom Proxy-Server überlebt und den ursprünglichen Hostnamen erhält

Basierend auf dem Vorschlag von @epegzz für die Regex.

( url ) => {
  return url.match('^[^?]*')[0].split("https://stackoverflow.com/").slice(1)
}

gibt ein Array mit Pfaden zurück.

Benutzer-Avatar
Kano

Eine modernere Lösung, die die verwendet URL WebAPI:

(req, res) => {
  const { pathname } = new URL(req.url || '', `https://${req.headers.host}`)
}

Benutzer-Avatar
Mistico

Ich habe das benutzt const { pathname } = req?._parsedUrl || {}; und es hat bei mir funktioniert

1061920cookie-checkNode.js: Holen Sie sich den Pfad aus der Anfrage

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy