【问题标题】:How to structure Express server to use granular API endpoints如何构建 Express 服务器以使用粒度 API 端点
【发布时间】:2022-02-04 17:42:01
【问题描述】:

我目前有一个用于移动应用的 Express 服务器,其结构如下 (server.js):

const PostRouter = require('./api/production/Post');
const UserRouter = require('./api/production/User');
...

app.use('/posts', PostRouter)
app.use('/users', UserRouter)

然后在 api/production/Post 我有:

router.get('/fetch', (req, res) => {
...
}

router.get('/delete', (req, res) => {
...
}
etc..

但是,我真的很想重建服务器以匹配我相应的 NextJS 应用程序的结构及其 API 结构,类似于:

/api/posts/
    add-post/
        index.js
    fetch-all/
        index.js
    edit-post/
        index.js

每个 index.js 文件只包含一个端点/查询,而不是当前结构,每个文件都有多个与 router.get 事物的查询。

看起来这可以通过为每个端点创建一个路由器来实现,例如:

const PostFetchAllRouter = require('./api/posts/fetch-all');
const PostEditPostRouter = require('./api/posts/edit-post');
...
app.use('posts/fetch-all', PostFetchAllRouter)
app.use('posts/edit-post', PostEditPostRouter)

请问最好的方法是什么?如果没有 server.js 文件中的所有样板,有没有更简单的方法来做到这一点?我对 Express 很陌生 - 如果这是一个幼稚的问题,请原谅

【问题讨论】:

    标签: node.js express


    【解决方案1】:

    您可以将“样板”代码移动到不同的路由器文件并构建路由器链。但是你必须多写一点。

    server.js
    |-api/
    |--posts/
    |---PostsRouter.js
    |---fetchAll.js
    |--users/
    |---UserRouter.js
    

    fetchAll.js

    const express = require("express");
    const FetchAll = express.Router();
    
    FetchAll.get("/fetch", (req, res) => { res.send("/posts/fetch") });
    module.exports = FetchAll;
    

    PostsRou​​ter.js

    const express = require("express");
    const FetchAll = require("./fetchAll");
    const PostsRouter = express.Router();
    PostsRouter.use(FetchAll);
    
    module.exports = PostsRouter;
    

    server.js

    const express = require('express');
    const PostsRouter = require("./api/posts/PostsRouter");
    
    let app = express();
    app.use("/posts", PostsRouter);
    
    app.listen(80, () => {});
    

    如果你像这样构建它,你会将小型路由器插入下一个更大的路由器,然后在 server.js 中使用它们。

    GET localhost/posts/fetch HTTP/1.1 
    // returns in my example the string "/posts/fetch"
    

    这就是你要找的吗?

    【讨论】:

      猜你喜欢
      • 2018-01-12
      • 2020-12-18
      • 1970-01-01
      • 2020-07-10
      • 2019-11-26
      • 2019-08-03
      • 2020-10-06
      • 2021-10-19
      • 1970-01-01
      相关资源
      最近更新 更多