从API获取数据并将其保存到数据库

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

我有 MS SQL 数据库,我使用 FeathersJS 5 作为后端...我有点困惑,因为我无法得到预期的结果...我从微软获取数据,然后我想将它们保存到我的数据库,但每次我发布请求时我什么也没有得到。

roomFetcher.js

import fetch from 'node-fetch'

export class roomFetcher {
  constructor(accessToken, app) {
    this.accessToken = accessToken
    this.app = app
  }

  async fetchRooms() {
    try {
      const response = await fetch('https://graph.microsoft.com/beta/places/microsoft.graph.room', {
        method: 'GET',
        headers: {
          Authorization: `TOKEN_IS_HERE`
        }
      })

      if (!response.ok) {
        throw new Error(`Microsoft Graph API request failed with status ${response.status}`)
      }

      const data = await response.json()

   
      const formattedRooms = data.value.map((room) => ({
        room_id: room.id,
        room_name: room.nickname,
        room_mail: room.emailAddress
      }))

      console.log(formattedRooms)


      return formattedRooms
    } catch (error) {
      console.error('Error fetching rooms:', error)
      throw error
    }
  }
}

conference-rooms.class.js

import { KnexService } from '@feathersjs/knex'
// import { roomFetcher } from '../roomFetcher.js'

export class ConferenceRoomsService extends KnexService {
  async create(rooms) {
    const ConferenceRoom = this.Model

    for (const room of rooms) {
      await ConferenceRoom.query().insert({
        room_id: room.id,
        room_name: room.nickname,
        room_mail: room.emailAddress
      })
    }
  }

  async fetchRooms(accessToken) {
    try {
      const roomFetcherInstance = new roomFetcher(accessToken, this.app)
      const rooms = await roomFetcherInstance.fetchRooms()
      await this.create(rooms)
      console.log('====================================')
      console.log(rooms)
      console.log('====================================')
      return rooms
    } catch (error) {
      console.error('Error fetching and saving rooms:', error)
      throw error
    }
  }
}

export const getOptions = (app) => {
  return {
    paginate: app.get('paginate'),
    Model: app.get('mssqlClient'),
    name: 'conference_rooms'
  }
}

conference-rooms.schema.js

// For more information about this file see https://dove.feathersjs.com/guides/cli/service.schemas.html
import { resolve, getValidator, querySyntax } from '@feathersjs/schema'
import { dataValidator, queryValidator } from '../../validators.js'

// Main data model schema
export const conferenceRoomsSchema = {
  $id: 'ConferenceRooms',
  type: 'object',
  additionalProperties: false,
  required: ['room_id', 'room_name', 'room_mail'],
  properties: {
    room_id: { type: 'string' },
    room_name: { type: 'string' },
    room_mail: { type: 'string' }
  }
}
export const conferenceRoomsValidator = getValidator(conferenceRoomsSchema, dataValidator)
export const conferenceRoomsResolver = resolve({})

export const conferenceRoomsExternalResolver = resolve({})

// Schema for creating new data
export const conferenceRoomsDataSchema = {
  $id: 'ConferenceRoomsData',
  type: 'object',
  additionalProperties: false,
  required: ['room_id', 'room_name', 'room_mail'],
  properties: {
    ...conferenceRoomsSchema.properties
  }
}
export const conferenceRoomsDataValidator = getValidator(conferenceRoomsDataSchema, dataValidator)
export const conferenceRoomsDataResolver = resolve({})

// Schema for updating existing data
export const conferenceRoomsPatchSchema = {
  $id: 'ConferenceRoomsPatch',
  type: 'object',
  additionalProperties: false,
  required: [],
  properties: {
    ...conferenceRoomsSchema.properties
  }
}
export const conferenceRoomsPatchValidator = getValidator(conferenceRoomsPatchSchema, dataValidator)
export const conferenceRoomsPatchResolver = resolve({})

// Schema for allowed query properties
export const conferenceRoomsQuerySchema = {
  $id: 'ConferenceRoomsQuery',
  type: 'object',
  additionalProperties: false,
  properties: {
    ...querySyntax(conferenceRoomsSchema.properties)
  }
}
export const conferenceRoomsQueryValidator = getValidator(conferenceRoomsQuerySchema, queryValidator)
export const conferenceRoomsQueryResolver = resolve({})

我真的很沮丧,因为当我使用如下所示的示例正文发布请求时,它会起作用......

{
"room_id" : "1234",
"room_mail" : "12341243421",
"room_name" : "gfdsgdsf"

}

javascript sql-server microsoft-graph-api feathersjs
1个回答
0
投票

在您的 create 方法中,您尝试使用 ConferenceRoom.query() 的 insert 方法将数据插入数据库。但是,您应该使用 FeathersJS 服务的 create 方法将数据正确插入数据库。 create 方法旨在与 FeathersJS 服务配合使用,并确保应用挂钩、验证和其他与服务相关的功能。

async create(rooms) {
  try {
    const createdRooms = await this.Model.create(rooms);
    return createdRooms;
  } catch (error) {
    console.error('Error creating rooms:', error);
    throw error;
  }
}

this.Model.create(rooms),您正在利用 FeathersJS 服务的功能将数据插入数据库。

© www.soinside.com 2019 - 2024. All rights reserved.