如何在Fastify中组织路由?

穆图尔甘

原谅我这些异端演讲,但从开发人员的经验来看,我认为express是api构建的最佳库。但是令我无法在任何地方使用它的是,每个人都在说(并用基准进行确认)它的运行速度很慢。

我尝试为自己选择一个替代方案,但找不到适合自己的方案。

例如,使用express我可以简单地组织以下结构:
userAuthMiddleware.js

export const userAuthMiddleware = (req, res, next) => {
    console.log('user auth');
    next();
};

adminAuthMiddleware.js

export const adminAuthMiddleware = (req, res, next) => {
    console.log('admin auth');
    next();
};

setUserRoutes.js

export const setUserRoutes = (router) => {
    router.get('/news', (req, res) => res.send(['news1', 'news2']));
    router.get('/news/:id', (req, res) => res.send(`news${req.params.id}`));
};

setAdminRoutes.js

export const setAdminRoutes = (router) => {
    router.post('/news', (req, res) => res.send('created'));
    router.put('/news/:id', (req, res) => res.send('uodated'));
};

userApi.js

imports...

const userApi = express.Router();

userApi.use(userAuthMiddleware);
// add handlers for '/movies', '/currency-rates', '/whatever'
setUserRoutes(userApi);

export default userApi;

server.js

imports...

const app = express();

app.use(bodyparser); // an example of middleware which will handle all requests at all. too lazy to come up with a custom

app.use('/user', userApi);
app.use('/admin', adminApi);

app.listen(3333, () => {
    console.info(`Express server listening...`);
});

现在,我很容易将处理程序添加到不同的“区域”,并且这些处理程序将通过必要的中间件。(例如,用户和管理员授权采用根本不同的逻辑)。但是我将这种中间件添加到一个地方,不再考虑它,它就可以了。

在这里,我正在尝试在上组织类似的灵活路由结构fastify到目前为止,我还没有成功。文档要么太小气,要么我不够专心。

通过'use'添加的Fastify中间件从http库而不是fastify库获取req和res对象。因此,使用它们并不是很方便-将某些东西从身体中拉出来是一个故事。

请在fastify中给出一个路由示例,比官方文档中详细一些。例如,类似于我的用户和admin在快递上的示例。

ZiiMakc

我这样组织路线:

fastify.register(
  function(api, opts, done) {
    api.addHook('preHandler', async (req, res) => {
      //do something on api routes
      if (res.sent) return //stop on error (like user authentication)
    }) 

    api.get('/hi', async () => {
      return { hello: 'world' }
    })

    // only for authenticated users with role.
    api.register(async role => {
       role.addHook('preHandler', async (req, res) => {
         // check role for all role routes
         if (res.sent) return //stop on error
       }) 

       role.get('/my_profile', async () => {
         return { hello: 'world' }
       })

    })

    done()
  },
  {
    prefix: '/api'
  }
)

现在,所有对api / *的请求将由fastify处理。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在NestJS拦截器中获取处理程序路由(对于Express和Fastify)

来自分类Dev

如何在NestJs中使用Fastify忽略特定的路由记录?

来自分类Dev

如何在Rails 4中组织控制器目录而不弄乱路由

来自分类Dev

如何在基于API的多页客户端应用程序中组织路由?

来自分类Dev

如何在UpdateReport中获得工件的组织?

来自分类Dev

如何在Rails中组织SCSS?

来自分类Dev

如何在ruby中组织对lsb的读写

来自分类Dev

如何在Julia中组织复杂的数据

来自分类Dev

如何在ouchDB中组织表?

来自分类Dev

如何在durandal中组织App?

来自分类Dev

如何在PHP中组织MVC架构

来自分类Dev

如何在流布局中组织对象?

来自分类Dev

反应路由-如何在父组件中使用OnClick组织重定向

来自分类Dev

Vertx Web:如何在多个文件之间拆分和组织路由?

来自分类Dev

如何在Rails中组织助手代码?

来自分类Dev

如何在Node.js中组织与DB的交互?

来自分类Dev

如何在Emacs中阅读组织模式文档?

来自分类Dev

如何在Maven中组织源代码生成?

来自分类Dev

如何在3层架构中组织依赖关系

来自分类Dev

如何在我的代码中组织帮助功能

来自分类Dev

如何在复杂对象中组织Javascript函数

来自分类Dev

如何在ASP.NET MVC中组织DAL

来自分类Dev

如何在现代Delphi中组织共享单位?

来自分类Dev

如何在Intellij Idea中组织大型Java项目

来自分类Dev

如何在单独的文件中组织处理代码?

来自分类Dev

如何在Netbeans中配置Java导入的组织

来自分类Dev

如何在Emberjs中组织复杂组件的状态?

来自分类Dev

如何在GitHub中获取用户所属的组织列表?

来自分类Dev

如何在Codeigniter网址中组织国家/州/城市浏览

Related 相关文章

热门标签

归档