2013-09-21 51 views
37

Tôi có một dịch vụ được gọi là "localhost: 3000/returnStat" cần có đường dẫn tệp làm thông số. Ví dụ: '/BackupFolder/toto/tata/titi/myfile.txt'.Node.js: lấy đường dẫn từ yêu cầu

Tôi làm cách nào để kiểm tra dịch vụ này trên trình duyệt của mình? Làm cách nào để định dạng yêu cầu này bằng Express chẳng hạn?

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

Yep tạo ra một cuộc gọi REST xem bài viết này http: //erichonorez.wordpress. com/2013/02/10/how-create-a-rest-api-với-nút-js-và-express/ – lastboy

+0

và với trình duyệt, chỉ để kiểm tra nhanh –

Trả lời

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

tôi đã không kiểm tra mã của bạn nhưng những thứ khác làm việc

Nếu bạn muốn để có được các thông tin đường đi từ yêu cầu url

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

1.If bạn đang nhận được các tham số URL vẫn không thể đọc tệp vừa sửa đường dẫn tệp của bạn trong ví dụ của tôi. Nếu bạn đặt index.html trong cùng thư mục với mã máy chủ, nó sẽ hoạt động ...

2. nếu bạn có cấu trúc thư mục lớn mà bạn muốn lưu trữ bằng nút thì tôi khuyên bạn nên sử dụng một số khung như expressjs

Nếu bạn muốn giải pháp thô nộp con đường

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; 

nguồn: http://www.nodebeginner.org/

+0

Mã của tôi hoạt động, nhưng làm cách nào tôi có thể truy xuất lại tệp đường dẫn (tham số req như '/BackupFolder/toto/tata/titi/myfile.txt') –

6

chỉ cần gọi req.url. nên làm công việc. bạn sẽ nhận được một cái gì đó như /something?bla=foo

+0

Đường dẫn trong ví dụ của bạn là '/ something'. –

+5

sử dụng 'req.url.match ('^ [^?] *') [0]' để chỉ hiển thị đường dẫn – epegzz

2

Bạn có thể sử dụng điều này trong app.js tệp.

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

Dựa trên đề xuất @epegzz cho regex.

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

trả về một mảng có đường dẫn.

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

hoặc

req.protocol + '://' + req.headers.host + req.originalUrl // Tôi thích cái này vì nó sống sót từ máy chủ proxy, nhận được tên máy chủ gốc

Các vấn đề liên quan