Node.js 如何使用参数在uri上装载express.js子应用程序

Node.js 如何使用参数在uri上装载express.js子应用程序,node.js,express,subapplication,Node.js,Express,Subapplication,我希望能够在包含参数的uri上装载整个express子应用程序。我有一些类似于以下内容: 在app.js中: var app_authors = require('./api/authors'); var app = express(); ... app.use('/api/authors', app_authors); ... module.exports = app; 在api/authors.js中: var app_author_books = require('./api/books

我希望能够在包含参数的uri上装载整个express子应用程序。我有一些类似于以下内容:

在app.js中:

var app_authors = require('./api/authors');
var app = express();
...
app.use('/api/authors', app_authors);
...
module.exports = app;
在api/authors.js中:

var app_author_books = require('./api/books');
var app = express();
...
app.get('/:author', ...);
...
app.use('/:author/books', app_author_books);
...
module.exports = app;
虽然第一个子应用程序可以工作,安装在
/api/authors
上,但嵌套的应用程序不能工作(不识别
/api/authors/:author/books
和类似格式的URL)

编辑:


对于好奇的人来说,AFAIK子应用程序并没有非常清晰的文档记录,但至少根据(以及相关的vimeo)的说法,它们应该可以工作。另请参见其他SO答案。

您似乎希望创建不同的“应用程序”,以在不同的文件中分隔路由/服务

你应该尝试给出的方法 它们将app变量作为参数传递,因此,您只有一个应用程序控制所有路由(位于单独的文件中)


我希望这就是您想要的。

在Express 4中,当您在路径(或regex)上装载子应用程序时,此路径将从req.path中删除(但仍在req.originalUrl中)


请参阅本文档并就装入点表达4个文档。

尝试以内联方式定义
app\u author\u books
函数,而不是要求
/api/authors
。还可以尝试在app.js中
app.use('/api/authors',app_authors)的路径中添加一个尾随斜杠@Plato虽然这可能有效,但你的答案似乎只是在回避主要问题。虽然可以为一个路由内联编写(或引用函数),但如果
app\u author\u books
包含多个路由(可能是所有书籍的RESTful接口),则会很麻烦。@NickMitchinson说的是正确的:app\u author\u books是一个子应用,包含许多路由。如前所述,子应用没有看到前缀。你能换一下吗?在app.js中:
app.use('/books/',app\u author\u books)
;在authors.js:
app.get('/:author',function(){…}
和新路径
/api/books/:author
中,关于前缀的可见性,您是对的,但是我使用从
:author
派生的对象填充
req
,所以这个限制不是问题。不幸的是,我无法交换子应用程序(因为内部对象依赖于author对象实例…)我知道这种方法,但我真的希望使用子应用程序,而不是单一的巨型应用程序。子应用程序由express支持,请参见示例,然后回答。哦,对不起……我把问题解释错了。我该学习更多的express子应用程序了!很好。我还没有多看express 4,但它似乎最终有了更好的路由。谢谢你的提醒。