2016-08-14 9 views
5

मैं अपने एपीआई के लिए मार्ग एक ExpressJS है और मैं फ़ाइल NodeJSअंदर NodeJS

के भीतर से यह कॉल करने के लिए
var api = require('./routes/api') 
app.use('/api', api); 

और मेरे ./routes/api.js अंदर चाहते से आंतरिक रूप से एक्सप्रेस ट्रेन कॉलिंग

var express = require('express'); 
var router = express.Router(); 
router.use('/update', require('./update')); 
module.exports = router; 
इसलिए यदि मैं अपने सभी लगता है खत्म हो, मेरे सामने से /api/update/something/:withParam कॉल करना चाहते हैं, लेकिन मैं 2 स्थान में फिर से पूरे समारोह को फिर से परिभाषित करने के लिए बिना मेरी NodeJS स्क्रिप्ट का एक अन्य पहलू के भीतर से इस कॉल करने की आवश्यकता

+०१२३५१६४१०६

मैं अंदर से HTTP मॉड्यूल उपयोग करने की कोशिश की है, लेकिन मैं सिर्फ एक "ECONNREFUSED" त्रुटि

http.get('/api/update/something/:withParam', function(res) { 
    console.log("Got response: " + res.statusCode); 
    res.resume(); 
}).on('error', function(e) { 
    console.log("Got error: " + e.message); 
}); 

मैं समझता हूँ एक्सप्रेस के पीछे विचार यह रूट बनाने के लिए है मिलता है, लेकिन मैं कैसे अलग उन कहते हैं

+0

आप इस तरह सर्वर क्यों दबाएंगे? आप केवल वही ऑपरेशन क्यों नहीं करेंगे? –

+0

क्योंकि मैं कुछ फ़ंक्शन दो बार करने के बाद दो बार – FrickeFresh

उत्तर

6

इसे संभालने के लिए 'सामान्य' या 'सही' तरीका उस कार्य को प्राप्त करना होगा जिसे आप स्वयं से टूटा जाना चाहते हैं, किसी भी मार्ग परिभाषा से अलग हो। शायद अपने मॉड्यूल में, लेकिन जरूरी नहीं। फिर इसे जहां भी आपको चाहिए उसे कॉल करें। इस तरह:

function updateSomething(thing) { 
    return myDb.save(thing); 
} 

// elsewhere: 
router.put('/api/update/something/:withParam', function(req, res) { 
    updateSomething(req.params.withParam) 
    .then(function() { res.send(200, 'ok'); }); 
}); 

// another place: 
function someOtherFunction() { 
    // other code... 
    updateSomething(...); 
    // .. 
} 
+0

हां दोहराना नहीं चाहता हूं, मुझे थोड़ी सी खुदाई करने के बाद, मुझे एहसास हुआ कि यह शायद इसके बारे में जाने का एकमात्र तरीका था। मुझे यकीन नहीं था कि क्या एक्सप्रेस के लिए "अपने मार्ग पर कॉल करें" प्रकार का काम किया गया था। धन्यवाद – FrickeFresh