2013-12-12 18 views
9

Tôi đang ở trong một phần mềm trung gian (function(req, res, next) {...}).truy cập đối tượng máy chủ HTTP trong node.js express

Có cách nào để truy cập đối tượng máy chủ HTTP từ req không?

CẬP NHẬT

Hãy để tôi cụ thể hơn. Tôi đang cố gắng để tìm ra một cổng mà máy chủ lắng nghe trên, hoặc unix socket đường dẫn, nếu nó lắng nghe trên đó.

+0

Có. Nếu bạn thực hiện 'console.log (req)', một trong các thuộc tính sẽ tham chiếu đến máy chủ. Nó không phải là tài liệu và có thể thay đổi trong tương lai, nhưng nó ở đó. Tôi không biết tên của tài sản như tôi không có Node tiện dụng, xin lỗi. – Brad

Trả lời

11

Làm thế nào về trong chính tập tin ứng dụng của bạn:

var express = require('express'); 
var http = require('http'); 
var app = express(); 

app.use(app.router); 

app.get('/', function (req, res, next) { 
    console.log(req.socket.server); 
}); 

app.server = http.createServer(app); 
app.server.listen(3000); 

Như Brad đề cập, Express không lộ một cái gì đó giống như đối tượng trở về từ #createServer(), tuy nhiên, TJ đã được đưa ra xem xét nghiêm túc để thả bất kỳ bao gồm các module HTTP thể hiện trong các bản phát hành trong tương lai. Sử dụng mã ở trên sẽ an toàn trong tương lai.

+0

Tôi khá chắc chắn điều này sẽ không hoạt động, vì 'req.app' không được xác định: http://expressjs.com/api.html#req.params. Xin hãy nhìn vào câu trả lời của tôi – verybadalloc

+0

Thử nghiệm và nó hoạt động. Ngoài ra còn có lợi ích bổ sung cho phép bạn tách các tuyến đường/phần mềm trung gian khỏi tệp chính mà câu trả lời của bạn không cho phép. – srquinn

+0

Vừa xem bình luận của Brad; bạn nói đúng, nó sẽ hoạt động. Nhưng nó không có giấy tờ. – verybadalloc

5

Nếu những gì bạn đang cố gắng làm là tiếp xúc với các đối tượng máy chủ bên trong router của bạn, sau đó yeah, middleware là con đường để đi:

var express = require('express'); 
var http = require('http'); 
var app = express(); 
var server = http.createServer(app); 

app.use(function(req, res, next){ //This must be set before app.router 
    req.server = server; 
    next(); 
}); 

app.use(app.router); 

server.listen(3000); 

Các middleware được sử dụng để tiếp xúc với các đối tượng máy chủ. Sau đó, bạn chỉ có thể truy cập vào nó trong bất kỳ router của bạn như vậy:

app.get('/', function (req, res, next) { 
    console.log(req.server.get('port')); // displays 3000 
}); 
4

đối với một số lý do, đối với tôi request.app.server đã không làm việc, có lẽ vì tôi đã sử dụng nhanh 4, sau chút đào lên, tôi thấy rằng req.socket.server hoạt động.

+0

Tìm thấy tuyệt vời, cảm ơn bạn đã cập nhật –

3

Hàm app.listen trả về máy chủ http của bạn.

nhanh/lib/application.js:

app.listen = function listen() { 
    var server = http.createServer(this); 
    return server.listen.apply(server, arguments); 
}; 
Các vấn đề liên quan