2013-09-21 65 views
37

我有一个名为“localhost:3000/returnStat”的服务,它应该将文件路径作为参数。例如'/BackupFolder/toto/tata/titi/myfile.txt'。Node.js:从请求中获取路径

如何在我的浏览器上测试此服务? 如何使用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); 
}); 
}; 
+0

没错创建一个REST调用看到这篇文章的http://erichonorez.wordpress。 com/2013/02/10/how-create-a-rest-api-with-node-js-and-express/ – lastboy

+0

和浏览器,仅用于快速测试 –

回答

33
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.如果您有您要使用节点,那么我会建议你使用像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/

+0

我的代码有效,但是如何才能检索文件路径(请求参数,例如'/BackupFolder/toto/tata/titi/myfile.txt') –

6

只需拨打req.url。应该做这项工作。你会得到像/something?bla=foo

+0

您示例中的路径是'/ something'。 –

+5

使用'req.url.match('^ [^?] *')[0]'来显示路径 – epegzz

2

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

基于正则表达式的@epegzz建议。

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

返回一个包含路径的数组。

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

req.protocol + '://' + req.headers.host + req.originalUrl //我喜欢这个,因为它从代理服务器生存,获得原始主机名