2016-08-14 40 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