如何使用节点js中的方法获取所有js文件操作

时间:2017-10-11 11:26:46

标签: node.js function

我想用它的方法类型获取所有.js文件的动作/路线。 基本上我想创建一个函数,返回我所有的动作和方法。

router.get('/this/is/action', function (req, res, next) {
     // This action is in login.js 
}

router.post('/another/action1', function (req, res, next) {
     // This action is in signup.js 
}

所以,在这种情况下,我的函数必须返回响应,如下所示。

{
    "data":[
         {
             "url":"/this/is/action",
             "method":"get"
         }
         {
             "url":"/another/action1",
             "method":"post"
         }
    ]
}

1 个答案:

答案 0 :(得分:0)

如果您使用快递,则可以使用由dougwilson快递创建者创建的以下代码段。

function print (path, layer) {
  if (layer.route) {
    layer.route.stack.forEach(print.bind(null, path.concat(split(layer.route.path))))
  } else if (layer.name === 'router' && layer.handle.stack) {
    layer.handle.stack.forEach(print.bind(null, path.concat(split(layer.regexp))))
  } else if (layer.method) {
    console.log('%s /%s',
      layer.method.toUpperCase(),
      path.concat(split(layer.regexp)).filter(Boolean).join('/'))
  }
}

function split (thing) {
  if (typeof thing === 'string') {
    return thing.split('/')
  } else if (thing.fast_slash) {
    return ''
  } else {
    var match = thing.toString()
      .replace('\\/?', '')
      .replace('(?=\\/|$)', '$')
      .match(/^\/\^((?:\\[.*+?^${}()|[\]\\\/]|[^.*+?^${}()|[\]\\\/])*)\$\//)
    return match
      ? match[1].replace(/\\(.)/g, '$1').split('/')
      : '<complex:' + thing.toString() + '>'
  }
}

app._router.stack.forEach(print.bind(null, []))