我试图将我的 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');