7

我在我的 nodejs 项目中使用 fastify 作为 web 框架。我想从一个目录中调用我的所有路由,该目录在主 JS 文件中定义了一个基本路由,就像我们在 express 中所做的那样。我已经阅读了很多博客,但我没有找到任何与我的问题相关的答案

就像在快递中一样,我们将路线分配为-

app.use('/user', user_route)

然后在 user_route 我们定义所有其他路由方法。

在 fastify 我用过

fastify.register(require('./routes/users'), { prefix: '/user' })

但是只能调用一个函数,例如-

module.exports = function (fastify, opts, done) {
  fastify.get('/user', handler_v1)
  done()
}

如果我想调用多路由函数怎么办?

4

4 回答 4

5

要使基本路由在所有路由中全局工作,您可以在 server.js 或 app.js 中注册它,无论您使用什么来注册您的服务器。

 fastify.register(require('../app/routes'), { prefix: 'api/v1' });

这里 '../app/routes' 指向你的路由目录。您定义的所有路由都将以 'api/v1' 为前缀

希望这可以帮助。

于 2020-05-14T03:58:34.757 回答
3

你可以使用 fastify-autoload 插件

const AutoLoad = require('fastify-autoload')
// define your routes in one of these
fastify.register(AutoLoad, {
    dir: path.join(__dirname, 'services'),
    options: Object.assign({ prefix: '/api' }, opts)

})

于 2019-08-21T14:21:44.677 回答
1

你可以像这样向一个 fastify 实例添加许多路由:

'use strict'

const Fastify = require('fastify')
const fastify = Fastify({ logger: true })

fastify.register((instance, opts, next) => {

  instance.get('/', (req, res) => { res.send(req.raw.method) })
  instance.post('/', (req, res) => { res.send(req.raw.method) })
  instance.put('/', (req, res) => { res.send(req.raw.method) })
  instance.patch('/', (req, res) => { res.send(req.raw.method) })

  instance.get('/other', (req, res) => { res.send('other code') })

  next()
}, { prefix: 'user' })


fastify.listen(3000, () => {
  console.log(fastify.printRoutes());
})

.register方法仅用于封装上下文和插件。这对于将您的代码库拆分为较小的文件并仅加载您需要的插件很有用。

通过这种方式,您将拥有一条针对不同 HTTP 方法响应不同的路由:curl -X GET http://localhost:3000/user/curl -X PUT http://localhost:3000/user/

于 2019-08-28T08:35:44.367 回答
0

Fastify 支持这种更有条理的方式。我一步一步解释这个。

  1. 创建一个目录名称,如路由器
  2. 该目录可能包含一个或多个.js文件。每个文件包含一个或多个路由。喜欢 -
async function routes(fastify, options){
    fastify.get('/', async function(request, reply) {
         return {hello: 'world'} 
    }), 

    fastify.get('/bye', async function(request, reply) {
         return {bye: 'good bye'} 
    }) 
}

module.exports = routes

  1. 接下来使用fastify-autoload注册这个目录。喜欢
const path = require('path')
const autoload = require('fastify-autoload')

async function app(fastify, options){
    //old standard routing
    //fastify.register(require('./routes/baisc-router'))

    //auto-load, based on directory 
    fastify.register(autoload,{
         dir: path.join(__dirname, 'routes')
    })
}
module.exports = app

如需清晰的详细代码,您可以关注此Git 存储库

于 2021-01-27T16:03:17.900 回答