2016-08-14 40 views
5

Mam ExpressJS routingu dla mojego API i chcę nazywać go od wewnątrz NodeJSWywołanie drogi ekspresowej wewnętrznie od NodeJS wewnątrz

var api = require('./routes/api') 
app.use('/api', api); 

i wewnątrz moich ./routes/api.js plik

var express = require('express'); 
var router = express.Router(); 
router.use('/update', require('./update')); 
module.exports = router; 

więc jeśli chcę zadzwonić /api/update/something/:withParam z moim przednim końcu jej wszystko znaleźć, ale trzeba zadzwonić to od wewnątrz innego aspektu mojego skryptu NodeJS bez konieczności ponownego przedefiniować cały funkcję w 2-gim miejscu

Próbowałem za pomocą modułu HTTP od wewnątrz, ale ja po prostu pojawia się błąd „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); 
}); 

Rozumiem Ideą Express jest tworzenie tras, ale w jaki sposób wewnętrznie nazywają je

+0

dlaczego trafisz na serwerze w ten sposób? Dlaczego raczej nie wykonasz tylko tej samej operacji? –

+0

ponieważ nie chcę powtórzyć funkcji dwa razy – FrickeFresh

Odpowiedz

6

"Zwykłym" lub "poprawnym" sposobem radzenia sobie z tym byłoby posiadanie funkcji, którą chcesz wywołać samodzielnie, odłączonej od definicji tras. Być może w swoim własnym module, ale niekoniecznie. Następnie zadzwoń w dowolnym miejscu. Podobnie jak:

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

Ya, po zrobieniu trochę więcej kopania, zdałem sobie sprawę, że to był prawdopodobnie jedyny sposób, aby przejść o tym. Nie byłem pewien, czy Express ma wbudowaną funkcję typu "zadzwoń do własnej trasy". Dzięki – FrickeFresh