习惯了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>
答案 0 :(得分:1)
我一直在使用一个名为routing-controllers的包来使用注释构建expressjs路由。它非常好,一般按预期工作。
然而,它有一个可能会阻止许多的要求:它是使用typescript构建的,因此可能无法在vanilla javascript节点项目中使用。答案 1 :(得分:0)
答案 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;