如何列出快速安装的应用程序的所有REST端点
How to list all REST end-points for Express mounted Apps?
在Express 4中,有一个对象来列出你的应用程序路由:app._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});
};
在高级REST客户端测试。我看到了我的routes
对象:
"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
}-
}
在我的Express应用程序中,我的挂载应用程序是这样定义的:
if (module.re('core')){
register(app);
} else {
var sub = express();
register(sub);
app.use('/' + module, sub);
}
function register(app){
app.set('root', root);
app.set('module_name', module);
require(routes)(app);
app.set('views', view_path);
app.set('view engine', view_engine);
}
更多细节,请查看我的源代码
:
如果你查看我的源代码,我有几个挂载的应用程序和todos只是其中之一。为什么其他模块/挂载的应用没有在上面的路由对象中列出?为什么路由中有
<anonymous>
和空的mounted_app对象?是否存在安全漏洞或其他问题?如何列出核心,todos应用程序和其他mounted_apps的RESTful端点(最好自动) ?如何调整我的应用程序设计/架构,以促进上市?我想要一个包含所有路由的对象,以便能够列出主应用导航栏的核心路由和子导航栏的挂载应用路由。
非常感谢。
EDIT:不重复,我看到了关于app._router.stack
快速4路线的帖子,然后继续进行我的测试。读我的第一行
你可以使用这里提供的代码访问快递应用中所有已注册的路由
下面回答我的第二个问题。第一个问题还在等待您的帮助。
我创建了一个名为modules的额外数组,基本上模块是一个迭代模块名称,我能够分配moduls[modul] = express()
应用程序实例。
+ moduls[modul] = express();
+ var sub = moduls[modul];
register(sub);
换句话说,一个挂载的应用程序被注册到moduls
数组中,之后我可以用_来循环它。forOwn并将app._router.stack
对象赋值给一个新的数组apps.
+ _.forOwn(moduls, function(val,key){
+ apps[key] = val._router.stack;
+ });
+
+ app.set('apps', apps);
然后,你可以在任何你喜欢的地方调用'apps'。在我的git仓库中,我选择在路由中加载它,以查看发送给API客户端的响应。
如果可以,请帮我解决问题1
- Amazon S3 REST API大小不正确
- 客户端服务器REST API captcha实现
- SharePoint 2010 Jquery/JSON Rest Multiple OR语句-如何
- 使用angularjs中的rest调用通过id获取数据
- 在同一ip但不同端口上使用Rest API
- REST的面向公众的身份验证机制
- 为什么使用AWS Signature v4对S3的REST调用并没有真正使用签名过程
- PHP REST服务抛出异常——希望避免控制台错误
- 从ANGULAL连接到REST API
- 如何在带有JQuery的Neo4j 2.2.x中使用事务Cypher HTTP端点和新的REST API身份验证和授权
- 在使用Protractor进行测试时,我可以用json文件替换结果,而不是调用实际的REST端点
- 如何在将数据发布到 REST 端点时在 AngularJS 中格式化日期
- 通过REST端点用JSON对象更新Mongoose架构
- 为REST端点返回不同的HTTP响应代码
- 在调用REST端点之前进行身份验证
- 链接angularjs rest端点访问
- 为什么我的rest端点不能在我的节点服务器上工作
- 如何列出快速安装的应用程序的所有REST端点
- 使用REST端点检索实体时自定义实体的ODataSetName
- jQueryAJAX从REST端点返回有限的结果