javascript - Express.js - 将子路由添加到所有已定义的路由
问题描述
假设我在文件中定义了一个 Express 应用程序,server.js
如下所示:
const app = express();
app.use('/foo', foo);
app.use('/bar', bar);
module.exports = app;
我将此 Express 应用程序导入另一个文件中,例如index.js
:
const app = require('./server');
const port = process.env.PORT || 3000;
const listen = (port) => {
app.listen(port, () => {
console.log(`Backend listening on port ${port}!`);
});
};
listen(port);
现在,此应用程序可用的路线是/foo
和/bar
。
有没有办法在index.js
文件中编辑配置,使路由变成/api/foo
and /api/bar
?无需触摸server.js
文件。
用例:
我有一个Nuxt.js
带有后端的应用程序,它Nuxt
通过如下serverMiddleware
属性加载到应用程序中nuxt.config.js
:
serverMiddleware: [
...
{ path: '/api', handler: '~/server.js' },
],
这与我上面描述的效果相似:它从server.js
app 导入 express 应用程序,并在其所有路由前添加/api
.
但是,通常我不想开发Nuxt
应用程序的前端部分,我只想在后端进行更改。为此,我有一个像index.js
上面这样的帮助文件,它只运行后端。(前端编译的时间往往很长,所以不需要的时候就不想编译了。)
这会产生一个问题,即所有路线都略有不同——它们/api
一开始就没有。这些路线被用于 Postman 等不同的工具中,但突然间它们就不起作用了。
我目前的解决方案是以与index.js
file 相同的方式定义文件,其中server.js
定义了我想要的所有路由 - 而不是等等,但这有其自身的问题,例如,如果我改变app.use('/foo', foo);
我必须改变. 我正在寻找更优雅的东西。app.use('/api/foo', foo);
server.js
index.js
解决方案
根据 express 4.0 文档https://expressjs.com/en/4x/api.html#app.use,您可以application
像使用router
. 简而言之,只需server.js
在要插入它的路由处将您的导出用作中间件,而不是直接调用.listen()
它。
这是一些对我有用的演示代码:
const express = require('express');
const app_inner = express();
app_inner.use('/foo', (req,res) => res.send('foo'));
const app_outer = express();
app_outer.use('/foo2', app_inner);
app_outer.listen(9999);
// web browser at localhost:9999/foo2/foo returns 'foo' as expected
推荐阅读
- android - 如何在当前应用程序上获取音频焦点?
- laravel - 将相关的模型集合数组替换为新的格式化数组
- r - 在 R 中更新 tidyverse 的问题
- c# - 在.net核心应用程序中自托管HTTP(s)端点而不使用asp.net?
- javascript - 我有来自谷歌表单上传文件的电子表格和链接。但是当我使用标记将数据传输到文档时,这些链接不可点击
- python - 如何在#channel中显示具有特定角色的成员?(与不和谐.py)
- javascript - 向下导航到行之间的下一个最近的 Flexbox 项目?
- android - 改造 2:如何从响应正文中获取多个值
- single-sign-on - Netscaler - 通过 SAML 身份验证
- javascript - 添加删除并动态指示编号