![](/img/trans.png)
[英]Express.js routing. How to put a default route before all of my existing routes
[英]Express.js - prepend sub-route to all defined routes
假设我在文件中定义了一个 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
和/api/bar
? 不涉及server.js
文件。
我有一个Nuxt.js
与被加载到后端应用Nuxt
通过应用serverMiddleware
物业nuxt.config.js
这样的:
serverMiddleware: [
...
{ path: '/api', handler: '~/server.js' },
],
这与我上面描述的效果类似:它从server.js
应用程序导入 express 应用程序,并在其所有路由之前添加/api
。
但是,通常我不想开发Nuxt
应用程序的前端部分,我只想在后端进行更改。 为此,我有一个像上面的index.js
这样的帮助文件,它只运行后端。 (Frontend经常需要很长时间才能编译,这就是为什么我不想在不需要的时候编译它。)
这会产生一个问题,即所有路由都略有不同——它们在开始时缺少/api
。 这些路由被用于不同的工具,如 Postman 等,突然间它们不起作用了。
我目前的解决方案是以与server.js
文件相同的方式定义index.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,您可以像使用router
一样使用application
实例。 简而言之,只需将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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.