是否有任何工具允许在nodejs中使用注释设置路由?

时间:2016-06-07 06:26:36

标签: node.js routing annotations

习惯了Symfony,我想知道是否有办法在nodejs中使用注释设置路由。

例如,我们说我有以下代码:

/**
 * @Route('/', method="GET")
 */
 var homeAction = function(req, res){


 }

并以某种方式将其编译为以下内容:

var router = require('my-actual-router');

var homeAction = function(req, res){

}
router.get('/', homeAction);

我找到了一些可用于解析注释的npm包,但没有找到使用注释生成实际javascript代码的工具,我想知道在开始编写自己的代码之前是否有一些模糊的工具缺失。< / p>

3 个答案:

答案 0 :(得分:1)

我一直在使用一个名为routing-controllers的包来使用注释构建expressjs路由。它非常好,一般按预期工作。

然而,它有一个可能会阻止许多的要求:它是使用typescript构建的,因此可能无法在vanilla javascript节点项目中使用。

https://www.npmjs.com/package/routing-controllers

答案 1 :(得分:0)

我从生产代码中创建了这个包,就是为了做到这一点:

carbon

https://www.npmjs.com/package/jsdoc-rest-api

答案 2 :(得分:0)

在这种情况下我做了什么-我将注解替换为检查是否没有这样的参数:

服务器设置代码:

const app = express();
testController.setupForServer(app, "/api/tests");

控制器代码:

let
  path = require('path');

const testsController = {

  setupForServer(expressApp, parentUrl) {
    for(let elementName in this) {
      if (this.hasOwnProperty(elementName)) {
        if (typeof this[elementName] === 'function'){
          if ( elementName.startsWith("get")
            || elementName.startsWith("put")
            || elementName.startsWith("post")
            || elementName.startsWith("delete")) {
            let urlMapping = path.join(parentUrl, this[elementName]());
            if (typeof urlMapping == "string") {
              expressApp.get(urlMapping, (req, res) => {
                return this[elementName](req, res);
              });
            }
          }
        }
      }
    }
  },

  getAllTests(req, res) {
    if (arguments.length === 0) return "all"; // this will be resolved to <parentUrl>/all
    res.send('hello world from TestsController.getAllTests');
  }
}

module.exports = testsController;