Javascript 在Express JS中为一个文件中的路由添加前缀

Javascript 在Express JS中为一个文件中的路由添加前缀,javascript,node.js,express,Javascript,Node.js,Express,我目前正在重构我的代码,我希望有一种更有效的方法使我的代码看起来更漂亮。以下是我目前拥有的: router.route('/api/merchant/') .get(controllerFunction) .post(controllerFunction); router.route('/api/user/') .get(controllerFunction) .post(controllerFunction); router.

我目前正在重构我的代码,我希望有一种更有效的方法使我的代码看起来更漂亮。以下是我目前拥有的:

router.route('/api/merchant/')
        .get(controllerFunction)
        .post(controllerFunction);

router.route('/api/user/')
        .get(controllerFunction)
        .post(controllerFunction);

router.route('/admin/user/')
        .get(controllerFunction)
        .post(controllerFunction);

router.route('/admin/place/')
        .get(controllerFunction)
        .post(controllerFunction);
您可以看到,我将“api”和“admin”作为某些路由的前缀

我可以将API路由分离到另一个文件中,并让“app.use”中间件适当地附加它们,但我想知道如何绕过这个问题,将这些路由放在一个文件中,主要问题是文件末尾:

module.exports=路由器


这只允许我对所有路由使用一个前缀。

您可以将整个路由器装载到一个路径上。如果您执行以下操作:

router.get('/:id',someFn)

然后在其他地方你可以做:

app.use('/api',路由器)

路由“/api/:id/”将解析为someFn处理程序

更新

我不确定我是否完全理解您的担忧,坦率地说,将所有路由放在一个文件中会使文件的长度超出我的承受范围,但如果您真的只想安装一个路由器,您可以在路由文件中执行与我描述的类似的操作

在这种情况下,您仍然可以创建多个路由器,但不必将它们导出并安装到应用程序上,您可以这样做:

const adminRouter = express.Router();
// configure the admin routes as I described 

const apiRouter = express.Router();
// configure API routes

const main = express.Router();

main.use('/admin', adminRouter);
main.use('/api', apiRouter);

module.exports = main;

您可以在块代码下面继续,但我建议您将controler函数写入另一个文件,每次一次

        var router = express.Router();
        var useApi = router.route('/user')
                .get(controllerFunction)
                .post(controllerFunction);

        var useAdmin = router.route('/user')
                .get(controllerFunction)
                .post(controllerFunction);

        app.use('/api', userApi);
        app.use('/admin', userAdmin);

如果您的代码已经通过了测试和functional.Neat,那么这可能是一个很好的候选。我不知道,我只想安装路由器的一部分。一个用于“api”,另一个用于“管理”路由器,目的是隔离功能部分。要想做你想做的事,只需制作两个路由器并将它们安装在不同的路径上即可。我希望我不能将它们隔离作为解决方案。谢谢你的回答。好吧,将它们作为一个文件保留是一种选择,请参阅MyBuUpdate。不过,出于长期维护的原因,人们往往不喜欢这样。Ymmv