Node.js:从请求获取path

我有一个名为“localhost:3000 / returnStat”的服务应该以文件path为参数。 例如'/BackupFolder/toto/tata/titi/myfile.txt'。

我如何在我的浏览器上testing这项服务? 如何使用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); }); }; 

Solutions Collecting From Web of "Node.js:从请求获取path"

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

我没有testing你的代码,但其他的东西的作品

如果你想从请求url获取path信息

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

1.如果你得到的URL参数仍然不能读取文件,只是在我的例子中纠正你的文件path。 如果您将index.html放置在与服务器代码相同的目录中,则会起作用…

如果你有大的文件夹结构,你想要使用节点主机,那么我会build议你使用像expressjs一些框架

如果你想原始解决scheme的文件path

 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/

只需调用req.url 。 应该做的工作。 你会得到类似的/something?bla=foo

你可以在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); 

基于正则expression式的@epegzzbuild议。

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

返回一个包含path的数组。

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

要么

req.protocol + '://' + req.headers.host + req.originalUrl //我喜欢这个,它从代理服务器中生存下来,得到原始的主机名