2016-01-11 26 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,你只需要处理模块添加到您的应用程序,添加映射配置文件,并重新启动您的节点的应用程序。这是我能想到的最低配置:)