2013-12-12 11 views
9

मैं एक मिडलवेयर (function(req, res, next) {...}) के अंदर हूं।HTTP सर्वर ऑब्जेक्ट तक पहुंच node.js एक्सप्रेस

क्या req से HTTP सर्वर ऑब्जेक्ट तक पहुंचने का कोई तरीका है?

अद्यतन

मुझे अधिक विशिष्ट हैं। मैं उस बंदरगाह को खोजने का प्रयास कर रहा हूं जिसे सर्वर सुनता है, या सॉकेट पथ को यूनिक्स करता है, अगर वह उस पर सुन रहा है।

+0

नहीं है। यदि आप 'console.log (req)' करते हैं, तो गुणों में से एक सर्वर का संदर्भ देता है। यह दस्तावेज नहीं है और भविष्य में बदल सकता है, लेकिन यह वहां है। मुझे संपत्ति का नाम पता नहीं है क्योंकि मेरे पास नोड आसान नहीं है, क्षमा करें। – Brad

उत्तर

11

कैसे अपने मुख्य अनुप्रयोग फ़ाइल में के बारे में:

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

ब्रैड उल्लेख किया है, एक्सप्रेस जैसी वस्तु #createServer() से लौटे कुछ का पर्दाफाश करता है, लेकिन, टीजे HTTP मॉड्यूल के किसी भी शामिल किए जाने को छोड़ने के लिए गंभीर विचार व्यक्त कर दिया गया है भावी रिलीज में व्यक्त में। ऊपर दिए गए कोड का उपयोग भविष्य सुरक्षित होगा।

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

मिडलवेयर सर्वर वस्तु का पर्दाफाश करने के लिए किया जाता है:

+0

मुझे यकीन है कि यह काम नहीं करेगा, क्योंकि 'req.app' परिभाषित नहीं किया गया है: http://expressjs.com/api.html#req.params। कृपया मेरे उत्तर – verybadalloc

+0

पर एक नज़र डालें और यह काम करता है। आपके रूट/मिडलवेयर को आपकी मुख्य फ़ाइल से अलग करने की अनुमति देने का अतिरिक्त लाभ भी है जिसका उत्तर आपके उत्तर की अनुमति नहीं देता है। – srquinn

+0

बस ब्रैड की टिप्पणी देखी; आप सही हैं, यह काम करेगा। लेकिन यह अनियंत्रित है। – verybadalloc

5

है कि आप क्या करने की कोशिश कर रहे हैं आपके राउटर के अंदर सर्वर वस्तु का पर्दाफाश है, तो हाँ, मिडलवेयर जाने का रास्ता है। उसके बाद, आप बस इसे अपने रूटर में से किसी में इतनी तरह उपयोग कर सकते हैं: किसी कारण से

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

, मुझे request.app.server काम नहीं किया के लिए, शायद इसलिए कि मैं एक्सप्रेस 4 का उपयोग किया गया था, को खोदकर निकाल के बिट के बाद, मैंने पाया कि req.socket.server काम करता है।

+0

शानदार खोज, अपडेट के लिए धन्यवाद –

3

फ़ंक्शन ऐप.लिस्टन आपका http सर्वर लौटाता है।

एक्सप्रेस/lib/application.js:

app.listen = function listen() { 
    var server = http.createServer(this); 
    return server.listen.apply(server, arguments); 
}; 
संबंधित मुद्दे