7

nodejs プロジェクトで web フレームワークとして fastify を使用しています。エクスプレスで行うように、メイン JS ファイルで定義されたベース ルートを持つディレクトリからすべてのルートを呼び出したいと思います。多くのブログを読みましたが、質問に対する適切な回答が見つかりませんでした

エクスプレスのように、ルートを次のように割り当てます-

app.use('/user', user_route)

次に、user_route で他のすべてのルート メソッドを定義します。

fastifyで私が使用した

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

ただし、次のように呼び出すことができる関数は1つだけです-

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 に答える
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. routersのようなディレクトリ名を作成する
  2. このディレクトリには、1 つまたは複数の.jsファイルが含まれる場合があります。各ファイルには、1 つまたは複数のルートが含まれています。お気に入り -
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 に答える