2

我试图将我的 angular-Apollo 客户端连接到我的 graphql 后端,但我一直收到 405 错误。我的服务器托管在本地主机端口 4000 上,我的客户端也在本地主机(端口 4200)上。对于我的客户,我使用了 Apollo 文档中所示的基本设置并对其进行了一些调整。如果我在浏览器中查看请求,我可以看到 Apollo 正在使用方法选项。就我而言,graphql Server 不支持 Options 方法。那么如何让我的客户使用 get 或 post 方法或允许 Options 方法?

我的客户脚本:

import {Component, OnInit} from '@angular/core';
import {Apollo} from 'apollo-angular';
import gql from 'graphql-tag';

@Component({
  selector: 'app-patient',
  template: `
    <div *ngIf="loading">
      Loading...
    </div>
    <div *ngIf="error">
      Error :(
    </div>
    <div *ngIf="allPatients">
      <div *ngFor="let patient of allPatients">
        <p>{{patient.id}}</p>
      </div>
    </div>
  `,
})
export class PatientComponent implements OnInit {
  allPatients: any[];
  loading = true;
  error: any;

  constructor(private apollo: Apollo) {}

  ngOnInit() {
    this.apollo
      .watchQuery<any>({
        query: gql`
          {
            allPatients {
              id
            }
          }
        `,
      })
      .valueChanges.subscribe(result => {
        this.allPatients = result.data && result.data.allPatients;
        this.loading = result.loading;
        this.error = result.errors;
      });
  }
}

这是我的服务器脚本文件:

var express = require('express');
var graphqlHTTP = require('express-graphql');
var { buildSchema } = require('graphql');

// Construct a schema, using GraphQL schema language
var schema = buildSchema(`
  type Patient {
    id: String
  }
  type Query {
    allPatients: [Patient]
  }
`);

// The root provides a resolver function for each API endpoint
var root = {
  allPatients: () => {
    return [{id: "testID1"}, {id: "testID2"}];
  },
};

var graphQLApp = express();
graphQLApp.use('/graphql', graphqlHTTP({
  schema: schema,
  rootValue: root,
  graphiql: true,
}));
graphQLApp.listen(4000);
console.log('Running a GraphQL API server at http://localhost:4000/graphql');
4

0 回答 0