Javascript 如何列出快速安装的应用程序的所有REST端点?

Javascript 如何列出快速安装的应用程序的所有REST端点?,javascript,node.js,rest,express,Javascript,Node.js,Rest,Express,在Express 4中,有一个对象可以列出应用程序路由:app.\u router.stack 我尝试在todos模块路由文件中的路由中将其转储到控制台: exports.update = (req,res) => { // console.log(app._router.stack); res.status(200).send({message:'TODO modify an existing post by using param ' + req.params.taskId,

在Express 4中,有一个对象可以列出应用程序路由:
app.\u router.stack

我尝试在todos模块路由文件中的路由中将其转储到控制台:

exports.update = (req,res) => {
  // console.log(app._router.stack);
  res.status(200).send({message:'TODO modify an existing post by using param ' + req.params.taskId, routes: app._router.stack});
};
使用AdvanceREST客户端进行测试。我看到了我的
路由
对象:

"routes": [21]    
9:  {
"name": "session"
"params": {}
"path": ""
"keys": [0]
"regexp": {
"fast_slash": true
}-
}-
10:  {
"name": "<anonymous>"
"params": {}
"path": ""
"keys": [0]
"regexp": {
"fast_slash": true
}-
}-
11:  {
"name": "mounted_app"
"keys": [0]
"regexp": {}
}-
12:  {
"name": "bound dispatch"
"keys": [0]
"regexp": {}
"route": {
"path": "/home"
"stack": [1]
0:  {
"name": "<anonymous>"
"keys": [0]
"regexp": {}
"method": "get"
}-
-
"methods": {
"get": true
}-
}-
}-
13:  {
"name": "bound dispatch"
"keys": [0]
"regexp": {}
"route": {
"path": "/"
"stack": [1]
0:  {
"name": "<anonymous>"
"keys": [0]
"regexp": {}
"method": "get"
}-
-
"methods": {
"get": true
}-
}-
}-
14:  {
"name": "mounted_app"
"keys": [0]
"regexp": {}
}-
15:  {
"name": "mounted_app"
"params": {}
"path": "/todos"
"keys": [0]
"regexp": {}
}-
16:  {
"name": "mounted_app"
"keys": [0]
"regexp": {}
}-
17:  {
"name": "serveStatic"
"keys": [0]
"regexp": {
"fast_slash": true
}-
}
有关更多详细信息,请查看

问题

  • 如果你查看我的资源,我有几个挂载的应用程序和TODO只是其中之一。为什么上面的routes对象中没有列出其他模块/装入的应用程序?为什么路由中有
    和空的挂载应用程序对象。是否存在安全漏洞或任何其他问题

  • 如何列出core、todos应用程序和其他已安装的_应用程序的RESTful端点(最好是自动列出)?如何调整我的应用程序设计/架构以便于上市?我想有一个所有路线的对象,以便能够列出主应用程序导航栏的核心路线和子导航栏的已安装应用程序路线

  • 多谢各位


    编辑:不重复,我在
    应用程序中看到了关于Express 4 routes的帖子。\u router.stack
    ,然后继续我的测试。阅读我的第一行。

    您可以使用提供的代码访问express app中的所有注册路线

    您可以使用提供的代码访问express app中的所有注册路线

    以下是我的第二个问题。第一个问题仍有待您的帮助。

    我创建了一个名为moduls的额外数组,基本上modul是一个迭代模块名,我能够分配
    moduls[modul]=express()
    app实例

    +    moduls[modul] = express();
     +    var sub = moduls[modul];
          register(sub);
    
    换句话说,一个挂载的应用程序被注册到
    modules
    array中,之后我可以使用u.forOwn循环通过它,并将
    app.\u router.stack
    对象分配给一个名为apps的新数组

    +  _.forOwn(moduls, function(val,key){
     +     apps[key] = val._router.stack;
     +  });
     +
     +  app.set('apps', apps);
    
    然后,你可以在任何你喜欢的地方调用“应用程序”。在我的示例中,我选择将其加载到路由中,以查看发送到API客户端的响应


    如果可以,请帮助解决我在问题1中的问题。以下是解决我的第二个问题。第一个问题仍有待您的帮助。

    我创建了一个名为moduls的额外数组,基本上modul是一个迭代模块名,我能够分配
    moduls[modul]=express()
    app实例

    +    moduls[modul] = express();
     +    var sub = moduls[modul];
          register(sub);
    
    换句话说,一个挂载的应用程序被注册到
    modules
    array中,之后我可以使用u.forOwn循环通过它,并将
    app.\u router.stack
    对象分配给一个名为apps的新数组

    +  _.forOwn(moduls, function(val,key){
     +     apps[key] = val._router.stack;
     +  });
     +
     +  app.set('apps', apps);
    
    然后,你可以在任何你喜欢的地方调用“应用程序”。在我的示例中,我选择将其加载到路由中,以查看发送到API客户端的响应


    如果可以,请帮助解决我在问题1中的问题。

    我从那里得到了
    应用程序。_router.stack
    (你发布的链接)和控制台结果(routes对象)是在转储之后得到的。我从那里得到了
    应用程序。_router.stack
    (你发布的链接)和控制台结果(routes对象)是在转储它之后。查看我的第一行和编辑注释。你的标题实际上与dup的标题相同,因此你真的需要dup。如果这不是你真正想问的问题,那么把你的标题改成更具描述性的,或者对你在最后列出的两个实际问题做一个更好的总结。如果你尝试了dup中的所有内容,但他们没有回答你的问题,那么你需要解释这一点并参考特定的dup,以便人们知道什么不能解决你的问题。不,这是针对已安装的应用程序的,标题中有这些词。你说的“已安装的应用程序”是什么意思?在快速行话中没有这样的术语。有一个
    应用程序
    对象和路由器。不确定挂载的应用程序是什么。从对象树中,“名称”:“挂载的应用程序”,这是它们(子应用程序)在
    应用程序中定义和调用的内容。_router.stack
    查看我的第一行和我的编辑注释。你的标题实际上与dup的标题相同,因此你确实在那里要求dup。如果这不是你真正想问的问题,那么把你的标题改成更具描述性的,或者对你在最后列出的两个实际问题做一个更好的总结。如果你尝试了dup中的所有内容,但他们没有回答你的问题,那么你需要解释这一点并参考特定的dup,以便人们知道什么不能解决你的问题。不,这是针对已安装的应用程序的,标题中有这些词。你说的“已安装的应用程序”是什么意思?在快速行话中没有这样的术语。有一个
    应用程序
    对象和路由器。不确定装入的应用程序是什么。从对象树中的“名称”:“装入的应用程序”,这是它们(子应用程序)在
    应用程序中定义和调用的内容。_router.stack