我已经看到文档重新注入了一个新的DefaultNetworkLayer,但我似乎无法发送自定义标头.这是我的代码:
var headers = new Headers();
headers.append('Authorization', 'Basic hellotheretestheader');
Relay.injectNetworkLayer(
new Relay.DefaultNetworkLayer('/graphql', {
headers: headers
})
);
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用?
我使用graphql编写了一个非常简单的模式,但是边缘中的所有ID都是相同的.
{
"data": {
"imageList": {
"id": "SW1hZ2VMaXN0Og==",
"images": {
"edges": [
{
"node": {
"id": "SW1hZ2U6",
"url": "1.jpg"
}
},
{
"node": {
"id": "SW1hZ2U6",
"url": "2.jpg"
}
},
{
"node": {
"id": "SW1hZ2U6",
"url": "3.jpg"
}
}
]
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在github上发布了具体细节,这里是链接.
我有突变(代码),我想删除一个节点.它依赖于post rowId - 它是数据库中行的主键 - 以及查看者ID.当相关组件(代码)被渲染时.发送以下查询
query Queries {
viewer {
id,
...F1
}
}
fragment F0 on Viewer {
id
}
fragment F1 on Viewer {
id,
...F0
}
Run Code Online (Sandbox Code Playgroud)
和
query Queries($id_0:ID!) {
post(id:$id_0) {
id,
...F2
}
}
fragment F0 on Post {
id,
rowId
}
fragment F1 on Post {
rowId,
id
}
fragment F2 on Post {
headline,
body,
id,
...F0,
...F1
}
Run Code Online (Sandbox Code Playgroud)
我得到的回应包括viewer.id和post.rowId.正如你在这里看到的,
{
"data": {
"post": …Run Code Online (Sandbox Code Playgroud) 我在这里定义了一个graphQL对象:
const graphql = require('graphql');
const { GraphQLObjectType } = require('graphql');
const ProductType = new GraphQLObjectType({
name: 'Product',
description: 'Product GraphQL Object Schemal Model',
fields: {
productId: { type: graphql.GraphQLString },
SKU: { type: graphql.GraphQLString },
quantity: { type: graphql.GraphQLFloat },
unitaryPrice: { type: graphql.GraphQLFloat },
subTotal: { type: graphql.GraphQLFloat },
discount: { type: graphql.GraphQLFloat },
totalBeforeTax: { type: graphql.GraphQLFloat },
isTaxAplicable: { type: graphql.GraphQLBoolean },
unitaryTax: { type: graphql.GraphQLFloat },
totalTax: { type: graphql.GraphQLFloat }
}
});
module.exports.ProductType = …Run Code Online (Sandbox Code Playgroud) 如何在数组中组合数据const = menuGallery,menuCompany以及menuTour在其中调用所有数据menuData(参见下面的代码),以便我li应该显示graphQl来自所有三个数据的数据const = menuData
render() {
const menuGallery = get(this.props, 'data.allContentfulImageGallery.edges')
const menuCompany = get(this.props, 'data.allContentfulCompanyPage.edges')
const menuTour = get(this.props, 'data.allContentfulTourPage.edges')
const menuData = [{menuGallery},{menuCompany},{menuTour}]
return(
{menuData.map(({ node: page })=> (
<li className={slug === page.slug ? "selected" : ""} key={page.id}><a href={`/${page.slug}`}>{page.title}</a></li>
))}
Run Code Online (Sandbox Code Playgroud)
如果我将电流更改const menuData为常量menuData = menuGallery,它将显示来自的数据,allContentfulImageGallery但在组合倍数时,它们不会映射数据.
该graphQl查询
export const menuQuery = graphql`
query menuQuery($slug: String!) {
allContentfulCompanyPage(sort: {fields: …Run Code Online (Sandbox Code Playgroud) 我正在运行两个单独的docker服务。一个用于我的GraphQL服务器,另一个用于棱镜服务,该服务连接到本地Postgres数据库。我能够运行Arizona部署并直接在中进行测试http://localhost:4466。但是,当我尝试使用中的应用程序的GraphQL服务器进行查询时http://localhost:8080,它将给出以下响应。
{
"data": null,
"errors": [
{
"message": "request to http://localhost:4466/ failed, reason: connect ECONNREFUSED 127.0.0.1:4466",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"feed"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
这是堆栈跟踪。
graphql-server_1 | [Network error]: FetchError: request to http://localhost:4466/ failed, reason: connect ECONNREFUSED 127.0.0.1:4466
graphql-server_1 | Error: request to http://localhost:4466/ failed, reason: connect ECONNREFUSED 127.0.0.1:4466
graphql-server_1 | at new CombinedError (/usr/src/app/node_modules/graphql-binding/node_modules/graphql-tools/dist/stitching/errors.js:83:28)
graphql-server_1 | at Object.checkResultAndHandleErrors (/usr/src/app/node_modules/graphql-binding/node_modules/graphql-tools/dist/stitching/errors.js:101:15)
graphql-server_1 | at CheckResultAndHandleErrors.transformResult (/usr/src/app/node_modules/graphql-binding/node_modules/graphql-tools/dist/transforms/CheckResultAndHandleErrors.js:10:25)
graphql-server_1 | at …Run Code Online (Sandbox Code Playgroud) 在我将资源部分添加到代码中之前,这段代码一直有效。它与其他两个相似,所以我不确定为什么不起作用。
提前致谢
更新:-使用调试器后,我开始了解到问题出在RootQueryType.js和与之相关的文件中,因为当我尝试导出架构时,错误地弹出,并且恰好在query:RootQueryType位置,但仍然可以不能指出错误。
更新:-我也将schema.js文件放在最后
resourceType.js
const graphql = require("graphql");
const UserType = require("./userType");
const User = require("../models/User");
const Project = require("../models/Project");
const Resource = require("../models/Resource");
const ProjectType = require("./projectType");
const {
GraphQLObjectType,
GraphQLString,
GraphQLList,
} = graphql;
const ResourceType = new GraphQLObjectType({
name: "ResourceType",
fields: () => ({
id: { type: GraphQLString },
title: { type: GraphQLString },
url: { type: GraphQLString },
project:{
type:ProjectType,
resolve(parentValues,args){
return Project.findById(parentValues.id).populate("resources")
}
}
})
});
module.exports=ResourceType;
Run Code Online (Sandbox Code Playgroud)
RootQueryType.js
const mongoose = require('mongoose');
const graphql …Run Code Online (Sandbox Code Playgroud) 我有一个模型Location,这种关系与自身有关。
class Location extends Model<Location> {
...
@BelongsTo(() => Location, "countryId")
public country?: Location;
@BelongsTo(() => Location, "stateId")
public state?: Location;
@HasMany(() => Location, "countryId")
public states?: Location[];
@HasMany(() => Location, "stateId")
public regions?: Location[];
@HasMany(() => Location, "regionId")
public places?: Location[];
...
}
Run Code Online (Sandbox Code Playgroud)
所以基本上counties有很多states很多regions等等。我想将它实现为一个GraphQLType。
我尝试了什么:
const LocationType = new GraphQLObjectType({
name: "LocationType",
fields: () => ({
...
states: {type: new GraphQLList(LocationType)},
...
}),
});
Run Code Online (Sandbox Code Playgroud)
错误我得到
“ LocationType”隐式具有类型“ any”,因为它没有类型注释,并且在其自己的初始化程序中直接或间接引用。
基本上,我们在index.js文件中有此文件来设置ApolloProvider进行查询/更改的授权。
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import ApolloClient from "apollo-boost";
import { ApolloProvider } from "react-apollo";
let session = localStorage.getItem("session");
let authorization = "";
if(session) {
let sessionObj = JSON.parse(session);
authorization = sessionObj.access_token
}
const graphQLServerURL = process.env.REACT_APP_API_URL;
const client = new ApolloClient({
uri: graphQLServerURL + "/graphql",
headers: {
authorization,
}
});
ReactDOM.render(
<ApolloProvider client={client}>
<App />
</ApolloProvider>
, document.getElementById('root'));
Run Code Online (Sandbox Code Playgroud)
当应用首次加载时,authorization标题为null。但是,在<App>组件中,我们有一个<Login>组件,该组件基本上使用 …
我遵循Lighthouse网站上的主版本(4.1)教程。
https://lighthouse-php.com/4.1/getting-started/tutorial.html#installation
我重新安装了Laravel 5.8,然后执行了教程中编写的命令(在旁边npm install)
composer require nuwave/lighthouse mll-lab/laravel-graphql-playground
php artisan vendor:publish --provider="Nuwave\Lighthouse\LighthouseServiceProvider"
php artisan vendor:publish --provider="MLL\GraphQLPlayground\GraphQLPlaygroundServiceProvider"
之后,将/graphql/schema.graphql创建一个文件(在项目根目录下,而不是routes以前版本的文件夹下)。
现在,我用一些数据填充数据库,然后将模式从教程页面复制/粘贴到已发布的模式,启动服务器,然后访问显示正确的URL并将请求发送到的Playground http://127.0.0.1:8000/graphql。
单击Schema选项卡,我总是看到默认模式,而不是发布的默认模式/graphql/schema.graphql,当然,对与用户不同的资源的查询失败,并显示诸如的错误Cannot query field "posts" on type "Query".。我已经尝试过重启服务器并刷新Playground页面。
到config/lighthouse.php文件的架构已注册的路径base_path('graphql/schema.graphql')看起来正确的。
为什么Playground总是显示默认架构,而不显示已发布和编辑的架构?
我正在使用PHP 7.2.14,Lighthouse需要PHP> 7.1
graphql ×10
reactjs ×3
graphql-js ×2
javascript ×2
node.js ×2
relayjs ×2
laravel ×1
php ×1
prisma ×1
relay ×1
session ×1
typescript ×1