Подтвердить что ты не робот

Node.js: получить путь от запроса

У меня есть служба под названием "localhost: 3000/returnStat", которая должна принимать путь к файлу в качестве параметра. Например: '/BackupFolder/toto/tata/titi/myfile.txt'.

Как проверить эту услугу в моем браузере? Как я могу отформатировать этот запрос с помощью Express, например?

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);
});
};
4b9b3361

Ответ 1

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.');

Я не тестировал ваш код, но другие вещи работают

Если вы хотите получить информацию о пути из запроса url

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

1. Если вы получаете параметры URL, которые еще не могут прочитать файл, просто исправьте путь к файлу в моем примере. Если вы поместите index.html в тот же каталог, что и код сервера, он будет работать...

2.если у вас есть большая структура папок, которую вы хотите разместить с помощью node, тогда я бы посоветовал вам использовать некоторую фреймворк, например expressjs

Если вам требуется исходное решение для пути к файлу

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;

источник: http://www.nodebeginner.org/

Ответ 2

просто вызовите req.url. которые должны выполнять эту работу. вы получите что-то вроде /something?bla=foo

Ответ 3

Вы можете использовать это в файле app.js.

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

Ответ 4

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

или

req.protocol + '://' + req.headers.host + req.originalUrl//Мне нравится этот, поскольку он выживает с прокси-сервера, получая исходное имя хоста

Ответ 5

На основе предложения @epegzz для регулярного выражения.

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

возвращает массив с путями.