2016-01-11 55 views
0

我有一個node.js項目,它將作爲基本API運行。現在,我想通過模塊擴展這個API的功能。這些模塊應該能夠向API公開其他方法,並且我想以某種方式將它們保存在單獨的git倉庫中。應該儘可能少地識別這些模塊(最好的情況:簡單地將它添加到package.json的依賴關係中)。使用獨立模塊在功能上擴展API

正如你可能已經猜到的,我的node.js知識還有點侷限。在Symfony,我來自哪裏,這將通過服務來完成。現在,有這個node.js service-container module,但我不知道這是否是「節點路」。

+0

我假設你正在談論一個REST API。在這種情況下,你所說的可以通過[express](http://expressjs.com/)來實現。快速應用程序可以由子應用程序組成。 –

+0

你能指點我一個更具體的例子嗎?另外一個沒有框架的解決方案會很有趣。 – madc

+0

我很想去,但在問一個更具體的問題之前,很難給出具體的例子! 「基本API」是指RESTful API嗎?您是否有示例顯示可以從不同的存儲庫中暴露「附加方法」?您是否閱讀過我將您鏈接到的快遞文檔?你有什麼嘗試?什麼工作?什麼沒有用?您可能會發現[如何提問](http://stackoverflow.com/help/how-to-ask)幫助部分有幫助。 –

回答

0

這裏是我會做它

第一:創建一個配置文件來保存您的API端點處理器映射(和一般的應用程序配置)

config.modules = [ 
{ 
    moduleLocation: "/path/to/my/module1.js", 
    apiPath: "/api/myAPI1" 
}, 
{ 
    moduleLocation: "/path/to/my/module2.js", 
    apiPath: "/api/myAPI2" 
} 
]; 
config.port = 8080; 
module.exports = config; 

其次,在您的節點主要的應用程序,使用快速動態地安裝在映射配置

var config = require('./config'); 
var express = require('express'); 

var app = express(); 

app.listen(config.port, function() { 
console.log("server starting on port " + config.port); 
}); 

for(var module in config.modules){ 
    app.use(module.apiPath, require(module.moduleLocation)); 
} 

你的模塊文件(module1.js和module2.js)應該是這樣的: VA r router = express.Router();

// invoked for any requested passed to this router 
router.use(function(req, res, next) { 
    // .. some logic here .. like any other middleware 
    next(); 
}); 

這樣一來,爲了延長您的API,你只需要處理模塊添加到您的應用程序,添加映射配置文件,並重新啓動您的節點的應用程序。這是我能想到的最低配置:)