使用单独的模块在功能上扩展API

时间:2016-01-11 12:23:58

标签: node.js

我有一个node.js项目,它将作为基本API。现在,我想通过模块扩展此API的功能。这个模块应该能够向API公开其他方法,并且我想以某种方式将它们保存在单独的git存储库中。应该尽可能少地识别这些模块(最好的情况:只需将其添加到package.json中的依赖项中)。

正如您可能已经猜到的那样,我的node.js知识还有些局限。在Symfony,我来自哪里,这将由服务完成。现在,有这个node.js service-container module,但我不知道这是否是节点方式"去吧。

1 个答案:

答案 0 :(得分: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;

其次,在您的节点主应用程序中,使用express在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)应如下所示:     var 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,您只需将处理模块添加到您的应用程序,将映射添加到配置文件,然后重新启动您的节点应用程序。这是我能想到的最小配置:)