我有 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"
}
在您的 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 服务的功能将数据插入数据库。