在服务器 FeathersJS 5 上传递 JWT

问题描述 投票:0回答:1

当我的服务器启动时,我需要从外部 API 获取数据,然后将它们保存到我的数据库中。这很好用,但我没有什么问题。 我的保存功能

import { EventFetcher } from './eventFetcher.js'

const eventFetcher = new EventFetcher()

export const reloadEvents = async () => {
  const newEventData = await eventFetcher.fetchEvents()
  console.log('Aktualizujem udalosti v db...')
  eventFetcher.updateLastFetchedData(newEventData)

  const response = await fetch('http://localhost:3030/reservations-ms', {
    method: 'POST'
  })

  if (response.ok) {
    console.log('Udalosti v databáze aktualizované!')
  } else {
    console.error('Chyba pri ukladaní udalostí.')
  }
}

它向我的本地端点发出 POST 请求,但在我为此路由添加身份验证后它不起作用,因为我没有在服务器端存储 JWT。

app.service(reservationsMsPath).hooks({
    around: {
      all: [
        authenticate('jwt'),
        schemaHooks.resolveExternal(reservationsMsExternalResolver),
        schemaHooks.resolveResult(reservationsMsResolver)
}

所以我的问题是,我是否需要以某种方式在这里获取令牌,或者还有其他方法可以做到这一点吗?

我以为这样的东西会起作用

import { EventFetcher } from './eventFetcher.js'
import { ReservationsMsService, getOptions } from '../services/reservations-ms/reservations-ms.class.js'

const eventFetcher = new EventFetcher()
const reservationsService = new ReservationsMsService()

export const reloadEvents = async () => {
  const newEventData = await eventFetcher.fetchEvents()
  console.log('Aktualizujem udalosti v db...')
  eventFetcher.updateLastFetchedData(newEventData)

  try {
    const response = await reservationsService.post(newEventData)

    if (response.ok) {
      console.log('Udalosti v databáze aktualizované!')
    } else {
      console.error('Chyba pri ukladaní udalostí.')
    }
  } catch (error) {
    console.error('An error occurred while sending the POST request:', error)
  }
}

但现在它说

错误:您必须提供模型(初始化的 knex 对象)

javascript jwt feathersjs
1个回答
0
投票

您可能不需要向服务器发出请求,而是直接从

app
文件导入
app
对象,或者在应用程序文件中注册一个 setup hook 来执行您需要的初始化:

const eventFetcher = new EventFetcher()

app.hooks({
  setup: [
    async (context: HookContext, next: NextFunction) => {
      // E.g. wait for MongoDB connection to complete
      const newEventData = await eventFetcher.fetchEvents()
      const reservationsService = context.app.service('reservations')

      console.log('Aktualizujem udalosti v db...')
      eventFetcher.updateLastFetchedData(newEventData)
    
      try {
        const reservation = await reservationsService.create(newEventData)
    
        console.log(reservation)
      } catch (error) {
        console.error('An error occurred while sending the POST request:', error)
      }

      await next()
    }
  ]
})
© www.soinside.com 2019 - 2024. All rights reserved.