2016-08-14 30 views
5

我有一個ExpressJS路由我的API,我想內的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從我的前端,其所有的發現,但我需要,而不必在二級位置再次重新定義了整個功能從我的劇本的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

雅,在做了更多的挖掘之後,我有點意識到這可能是解決這個問題的唯一方法。我不確定Express是否有內置的「呼叫你自己的路線」類型的功能。謝謝 – FrickeFresh