web-dev-qa-db-fra.com

Node.js: récupère le chemin de la requête

J'ai un service appelé "localhost: 3000/returnStat" qui devrait prendre un chemin de fichier en paramètre. Par exemple, '/BackupFolder/toto/tata/titi/myfile.txt'.

Comment puis-je tester ce service sur mon navigateur? Comment puis-je formater cette demande en utilisant Express par exemple?

exports.returnStat = function(req, res) {

var fs = require('fs');
var neededstats = [];
var p = __dirname + '/' + req.params.filepath;

fs.stat(p, function(err, stats) {
    if (err) {
        throw err;
    }
    neededstats.Push(stats.mtime);
    neededstats.Push(stats.size);
    res.send(neededstats);
});
};
50
Nabil Djarallah
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 == '/') {
        fs.readFile('./index.html', function(err, data) {
            res.end(data);
        });
    } else {
        var p = __dirname + '/' + 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.');

Je n'ai pas testé votre code mais d'autres choses fonctionnent

Si vous souhaitez obtenir les informations de chemin à partir de l'url de la demande

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

1.Si vous obtenez les paramètres d'URL toujours pas en mesure de lire le fichier, corrigez simplement le chemin de votre fichier dans mon exemple. Si vous placez index.html dans le même répertoire que le code serveur, cela fonctionnerait ...

2.si vous avez une grande structure de dossiers que vous souhaitez héberger à l'aide d'un nœud, je vous conseillerais d'utiliser un cadre tel que expressjs

Si vous voulez que la solution brute mette le chemin du fichier

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;

source: http://www.nodebeginner.org/

54
Gaurav

appelez simplement req.url. cela devrait faire le travail. vous obtiendrez quelque chose comme /something?bla=foo

8
Sagiv Ofek

Vous pouvez l'utiliser dans app.js fichier .

var apiurl = express.Router();
apiurl.use(function(req, res, next) {
    var fullUrl = req.protocol + '://' + req.get('Host') + req.originalUrl;
    next();
});
app.use('/', apiurl);
5
kumbhani bhavesh
req.protocol + '://' + req.get('Host') + req.originalUrl

ou

req.protocol + '://' + req.headers.Host + req.originalUrl // J'aime celui-ci, qui survit d'un serveur proxy, obtenant le nom d'hôte d'origine.

4
Xin

Basé sur la suggestion de @epegzz pour la regex.

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

retourne un tableau avec des chemins.

2
Ideabile