0

Fastify は、前回プレイしたときから大きく変わりました。また、Nuxt serverMiddlewareを使用して API ルートを追加する必要があることを読みましたが、続行する方法の例が見つかりませんでした。

以下は、Fastify を開始するためのインデックス ファイルです。次の行でnuxtの前にルートを追加しようとしました:

fastify.register(require('./routesIndex'), { prefix: '/api' })

新しいfastifyドキュメントによるとroutesIndex.js:

async function routes(fastify, options) {
    fastify.register(require('./fetchRemote'))
    fastify.register(require('./domains'))
}

module.exports = routes

徹底的に、domains.jsファイル:

async function routes(fastify, options) {
    const database = fastify.mongo.db('db')
    const collection = database.collection('test')

    fastify.get('/domains/list', async (request, reply) => {
        return { hello: 'world' }
    })

    fastify.get('/domains/:id', async (request, reply) => {
        const result = await collection.findOne({ id: request.params.id })
        if (result.value === null) {
            throw new Error('Invalid value')
        }
        return result.value
    })
}

module.exports = routes

サーバー/index.js :

const { Nuxt, Builder } = require('nuxt')
const fastify = require('fastify')({
  logger: true
})

fastify.register(require('./db'), {
  url: 'mongodb://localhost:27017'
})

// Import and Set Nuxt.js options
const config = require('../nuxt.config.js')
config.dev = !(process.env.NODE_ENV === 'production')

async function start() {
  // Instantiate nuxt.js
  const nuxt = new Nuxt(config)

  const {
    host = process.env.HOST || '127.0.0.1',
    port = process.env.PORT || 3000
  } = nuxt.options.server

  // Build only in dev mode
  if (config.dev) {
    const builder = new Builder(nuxt)
    await builder.build()
  } else {
    await nuxt.ready()
  }

  fastify.use(nuxt.render)

  fastify.listen(port, host, (err, address) => {
    if (err) {
      fastify.log.error(err)
      process.exit(1)
    }
  })
}

start()

/apiルートがブラウザで見つかりません。しかし、 nuxt.config.js 内でserverMiddlewareを使用する必要があることを読みました。

serverMiddleware: [
    { path: '/api', handler: '~/server/routesIndex.js' },
  ],

これを行うと、 fastify.registerからエラーが発生します。

(node:10441) UnhandledPromiseRejectionWarning: TypeError: fastify.register is not a function
    at routes (/media/srv/testingNuxt/server/routesIndex.js:4:13)
    at call (/media/srv/testingNuxt/node_modules/connect/index.js:239:7)
    at next (/media/srv/testingNuxt/node_modules/connect/index.js:183:5)
    at next (/media/srv/testingNuxt/node_modules/connect/index.js:161:14)
    at WebpackBundler.middleware (/media/srv/testingNuxt/node_modules/@nuxt/webpack/dist/webpack.js:5430:5)
(node:10441) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:10441) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

Fastify と Nuxt を使用して API ルートを追加するにはどうすればよいですか? API のためだけにポート 3001 に 2 つ目のサーバーを作成することは避けたいと考えています。

4

0 に答える 0