Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 9

0
votes
answers
60 views
+10

GraphQL突變體分析器

1

剛剛更新爲「graphql服務器-Express的1.3.0版本和運行任何突變時,現在我收到此錯誤:GraphQL突變體分析器

POST body missing. Did you forget use body-parser middleware? 

當初始化服務器,我在內的」 body-parser「包,所以我不確定這裏發生了什麼。有任何想法嗎?

服務器配置:

//GraphQL Server 
    graphQLServer.use(

     //GRAPHQL Endpoint 
     `/${settings.public.graphql.endpoint}`, 

     //Parse JSON 
     bodyParser.json(), 

     //authenticate 
     authenticateRequest, 

     //GRAPHQL Server 
     graphqlExpress(req => { 

      return { 
       schema: schema, 
       context: req 
      } 
     }) 

    ); 

示例請求:

curl 'http://localhost:5050/graphql'  
    -H 'authorization: Bearer xxxxxxxxxxx.xxxxxxxxxxx'  
    -d '{ 
    "query": "mutation { sensorData(sensorValue: u0027asdasdasdasd u0027)}", 
    "variables": {} 
    } 
    }' 
沙发
0
0

的請求(docs

curl 'http://localhost:5050/graphql'  
    -H "Content-Type: application/json"  
    -H 'authorization: Bearer xxxxxxxxxxx.xxxxxxxxxxx'  
    -d '{ 
    "query": "mutation { sensorData(sensorValue: u0027asdasdasdasd u0027)}", 
    "variables": {} 
    } 
    }' 
+0

謝謝祝福設置Content-Type: application/json頭球攻門!添加Content-Type爲我工作。欣賞您的意見:) – matt

+0

不客氣,不受歡迎。很高興提供幫助,如果此答案解決了您的問題,請通過單擊答案旁邊的複選標記將其標記爲已接受。請參閱:[如何接受答案的工作?](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)瞭解更多信息 – Bless

0
votes
answers
52 views
+10

如何使用graphql編寫過濾查詢?

0

目前我們正在使用graphql/graphql-ruby庫。根據我們的要求,我寫了幾個查詢和突變。如何使用graphql編寫過濾查詢?

我有以下的使用情況,在那裏我不知道如何實現它,

  1. 我已經有一個查詢/端點命名allManagers其返回所有經理的詳細信息。

  2. 今天我有要求實施另一個查詢返回基於region過濾器的所有經理。

我有2選項來處理這種情況

  1. 爲區域創建一個可選參數,在查詢內我需要檢查區域是否通過,然後根據區域進行過濾。

  2. 使用類似https://www.howtographql.com/graphql-ruby/7-filtering/的東西。

哪種方法是正確的?

沙发
0
0

看起來你可以用這兩種方法來完成這項工作。 #2看起來有點複雜,但如果你最終添加了大量不同類型的過濾器,可能會更具可擴展性?

你會被要求選擇多個地區嗎?或負面地區(除北美以外的任何地區?) - 這些是您在選擇方法時想要考慮的問題類型。

聽起來像是不錯的談話有一個同事:)

我可能會選擇先從一個簡單的方法,然後改變它出去更復雜時,其中一個簡單的解決方案並不能解決所有我的需要更多。

0
votes
answers
60 views
+10

Github GraphQL API:如何找出哪些字段是可搜索的?

1

當我運行查詢:Github GraphQL API:如何找出哪些字段是可搜索的?

{ 
    "query": "{user(login: "furknyavuz") {repositories(first: 50, isPrivate: false) {nodes {name url}}}}" 
} 

我收到以下錯誤:

{ 
"data": null, 
"errors": [ 
    { 
     "message": "Field 'repositories' doesn't accept argument 'isPrivate'", 
     "locations": [ 
      { 
       "line": 1, 
       "column": 51 
      } 
     ] 
    } 
] 
} 

我可以看到isPivate是Repository對象的領域,但我不能用它來搜索。

我不希望搜索對象的所有字段,但關鍵的問題是,我怎樣才能看到哪些字段是可搜索或可索引的?

沙发
0
3

isPrivateRepository對象,但repositoriesUser object的場RepositoryConnection類型和repositories連接項具有以下參數/類型:

  • 的隸屬關係[RepositoryAffiliation]
  • 字符串後
  • 字符串
  • 第一詮釋
  • isFork布爾
  • isLocked布爾
  • 最後詮釋
  • 排序依據RepositoryOrder前
  • 隱私RepositoryPrivacy

RepositoryPrivacy是一個有兩個值的枚舉:公共和私人。

以下請求將返回私人回購協議:

{ 
    user(login: "furknyavuz") { 
    repositories(first: 50, privacy:PRIVATE) { 
     nodes { 
     name 
     url 
     } 
    } 
    } 
} 

注意,在the explorer,如果鍵入CTRL +空格你將有模式與類型上市:

enter image description here

另外,CTRL +空格再次在「:」後會給出枚舉值:

enter image description here

板凳
0
1

自動完成:

導航到GitHub的GraphQL API Explorer。這是一個圖形界面,它可以讓你編寫你的查詢並實時運行它們。 GraphiQL的一個很好的功能是包含一個自動完成功能。當你輸入一個字段的參數,只需按下Alt鍵+空間+空間的可能的參數會彈出一個列表。這也適用於領域。

文檔:

您也可以通過敲擊在界面的右上角的Docs鏈接查看該模式的文檔。這將列出所有可能的字段,包括他們採取的參數。還有一個模式參考頁面here

GraphQL:

最後,你其實可以只問GraphQL端點自己。例如,運行此查詢將列出所有類型的架構和每一個使用的參數:

{ 
    __schema { 
    types { 
     name 
     inputFields { 
     name 
     description 
     type { 
      name 
     } 
     defaultValue 
     } 
    } 
    } 
} 
0
votes
answers
50 views
+10

如何避免在Webpack構建上捆綁模擬模塊?

2

我們試圖使我們的React + GraphQL項目獨立於生態系統中的任何其他層,以改善開發人員的體驗。與此相對應,我們編寫了一個簡潔的HOC,它包裝了Apollo自己的graphql HOC,並使用內部環境變量在網絡抓取和模擬數據之間切換。在生產版本中,所有模擬數據顯然不被使用,即使它是import ed。如何避免在Webpack構建上捆綁模擬模塊?

有什麼辦法來避免包括的WebPack的生產,你知道你的模塊不會需要,同時保持一切相同的/沒有違反程序?

喜歡的東西dynamic import()可以做的伎倆,但最終分塊你的構建,而不是忽略了什麼,你並不需要/想。

UPDATE:應用程序使用create-react-app1.0.17創建和後噴射。

+1

是否有可能將模擬數據模塊解析爲生產中的空模塊? https://github.com/facebookincubator/create-react-app/blob/master/packages/react-scripts/config/webpack.config.prod.js – HMR

+0

模擬apollo客戶端返回您想要模擬的數據,本地解決當NODE_ENV ==='production'不爲apollo提供模擬時,使用NODE_ENV env var在你的webpack.conf文件中將apollo添加到你的模擬模塊中,讓它遵循它的過程。這應該工作 –

+0

@HMR我相信這將是一個直截了當的解決方案。任何想法如何處理? –

沙发
0
3

我正在使用以下目錄結構。

api 
    index.js 
    apimock.js 
    apirest.js 

在index.js您根據NODE_ENV切換實現:

if (process.env.NODE_ENV === 'production') { 
    module.exports = require('./apirest'); 
} else { 
    module.exports = require('./apimock'); 
} 

您將需要使用的WebPack DefinePlugin設置NODE_ENV:

new webpack.DefinePlugin({ 
    'process.env': { 
    NODE_ENV: `"${process.env.NODE_ENV || 'development'}"`, 
    ENABLE_DEVTOOLS: JSON.stringify(!!process.env.ENABLE_DEVTOOLS) 
    } 
}) 

生成命令(NPM腳本):

NODE_ENV=production webpack --config webpack.config.js 

或模擬實現:

NODE_ENV=development webpack --config webpack.config.js 

的WebPack只能捆綁取決於NODE_ENV單一的實現。

在您的組件(傳奇......),你只需導入API:

import * as api from 'api'; 
+0

這會工作。但不幸的是,在我們的場景中並不那麼簡單,因爲數據層是通過Apollo的'graphql' HOC訪問的。不過,你給了我一些想法。 –

板凳
0
0

在你webpack.config.dev.js

resolve: { 
    alias:{ 
    "react-apollo":"./mock.js" 
    } 
} 

現在所有模塊請求作出反應,阿波羅編譯時會得到模擬爲dev。

我沒有阿波羅的客戶端,但這裏是嘲諷的jQuery的例子:

您的代碼:

import $ from 'jquery'; 
console.log($().message) 

webpack.dev.config.js:

alias:{ 
    "jquery":"./mock.js" 
} 

嘲笑。js:

??
0
votes
answers
37 views
+10

通獲得的場到另一個查詢在graphQL

0

想象一下下面的查詢:通獲得的場到另一個查詢在graphQL

query { 
    user { 
    id 
    } 
    SomeOtherStuff(id: <--- I want to pass the id obtained from user) { 
    id 
    } 
} 

你如何通過從一個查詢到另一個獲得的參數?

+0

您還沒有顯示您所使用的語言和GraphQL客戶端,或者是否與現有的API或一個工作,你正在設計你自己。這些信息將有助於爲您的問題提供更全面的答案。 –

+0

@DanielRearden我正在使用apollo –

沙发
0
1

在GraphQL中,請求的每個「級別」的字段都被並行執行和解析。在你的例子中,userSomeOtherStuff都是相同類型的字段(根Query類型) - 因此它們將同時被解析。這意味着每個查詢基本上不知道其他或其他解決方案。

你將不得不處理這種場景客戶端。換句話說,首先請求用戶,解析id的響應,然後發出第二個請求。

編輯:阿波羅,你將利用編寫用於此目的:

const userQuery = gql`query User { user { id } }`; 
const stuffQuery = gql`query SomeOtherStuff($id: ID) { someOtherStuff(id: $id){ stuff } }`; 

export default compose(
    graphql(userQuery, { name: 'userData' }) 
    graphql(stuffQuery, { name: 'stuffData', options: ({userData:{id}={}}) => ({variables: {id}}) }), 
)(YourComponent) 
+0

感謝您的回覆。這與我對GraphQL的期望並不相符。我認爲將多個請求合併爲一個的想法是GraphQL的主要原則。對我來說,這似乎是非常基本的場景,以獲得一些依賴於用戶,但不是嵌套在用戶本身的其他數據......有什麼辦法可以獲取依賴於用戶的數據,而不是嵌套在用戶鍵入(在相同的請求中)? –

+0

簡答題:不。我敢說,被迫應對你描述的情況表明API設計不佳。重點是,如果有與用戶有關的數據,它*應該*是用戶類型的一部分。如果數據與當前登錄的用戶(查看器)相關,則可能應該有一個上下文感知查看器查詢,可以讓您訪問它,而無需首先爲查看器首先獲取ID。 –

0
votes
answers
38 views
+10

在getter中改變類型 - 用graphql編組並行

0

我想將字符串數組存儲到我的mysql數據庫中,並在檢索它時解析它,但我得到的「字符串不能表示數組」。是否可以改變類型的getter可能與sequ??elize,如果是的話將如何做?在getter中改變類型 - 用graphql編組並行

choices: { 
    type:Sequelize.TEXT, 
    get(){ 
    var val = this.getDataValue('choices'); 
    return val ? JSON.parse(val):null; 
    }, 
    set(val){ 
    if(val && typeof(val)!=='string'){ 
     val = JSON.stringify(val); 
    } 
    this.setDataValue('choices',val); 
    } 
}, 
沙发
0
0

這不是sequelize或mysql的問題。這是我的GraphQL突變的問題,我必須重寫型

import { attributeFields } from "graphql-sequelize"; 
import { GraphQLList, GraphQLString } from "graphql"; 
import { Question } from "../schemas/Question"; 
import ResponsePayload from "../schemas/ResponsePayload"; 
import _ from "lodash"; 

var base = _.assign(attributeFields(sequelize.models.question, { 
    exclude: ["id", "createdAt", "updatedAt"] 
}), { choices: { type: new GraphQLList(GraphQLString) }}); 

const CreateQuestion = { 
    type: ResponsePayload, 
    args: base, 
    resolve: ... 
}; 

export { CreateQuestion }; 

具體我不得不改變

var base = attributeFields(sequelize.models.question, { 
    exclude: ["id", "createdAt", "updatedAt"] 
}); 

var base = _.assign(attributeFields(sequelize.models.question, { 
    exclude: ["id", "createdAt", "updatedAt"] 
}), { choices: { type: new GraphQLList(GraphQLString) }}); 

這將覆蓋的選擇的類型,在sequelize模型中被定義爲一個String,但是就GraphQL而言,它需要是一個數組。

0
votes
answers
32 views
+10

關係GraphQL

0

第二週,我嘗試鏈接apollo-server-express/MongoDB/Mongoose/GraphQL堆棧中的兩個集合,但我不明白。我發現了一個與REST API相似的課程,我需要的是所謂的關係。我需要這個,但在GraphQL關係GraphQL

watch video

如何車添加到用戶? 我收集的測試服務器,該代碼是在這裏:https://github.com/gHashTag/test-graphql-server 幫助

沙发
0
0

我克隆了你的項目,並實現了一些代碼,這裏我改變了關係的作品。請注意,我只是做了一個基本的代碼,沒有驗證或提前dataloader只是爲了確保非複雜性。希望它可以幫助。

的src/graphql /解析器/轎廂resolvers.js

import Car from '../../models/Car' 
import User from '../../models/User' 

export default { 
    getCar: (_, { _id }) => Car.findById(_id), 
    getCars:() => Car.find({}), 
    getCarsByUser: (user, {}) => Car.find({seller: user._id }), // for relationship 
    createCar: async (_, args) => { 
    // Create new car 
    return await Car.create(args) 
    } 
} 

的src/graphql /分解器/用戶resolvers.js

import User from '../../models/User' 

export default { 
    getUser: (_, { _id }) => User.findById(_id), 
    getUsers:() => User.find({}), 
    getUserByCar: (car, args) => User.findById(car.seller), // for relationship 
    createUser: (_, args) => { 
    return User.create(args) 
    } 
} 

的src/graphql /解析器/index.js

import UserResolvers from './user-resolvers' 
import CarResolvers from './car-resolvers' 

export default { 
    User:{ 
    cars: CarResolvers.getCarsByUser // tricky part to link query relation ship between User and Car 
    }, 
    Car:{ 
    seller: UserResolvers.getUserByCar // tricky part to link query relation ship between User and Car 
    }, 
    Query: { 
    getUser: UserResolvers.getUser, 
    getUsers: UserResolvers.getUsers, 
    getCar: CarResolvers.getCar, 
    getCars: CarResolvers.getCars 
    }, 

    Mutation: { 
    createUser: UserResolvers.createUser, 
    createCar: CarResolvers.createCar, 
    } 
} 

的src/graphql/schema.js

export default` 
    type Status { 
    message: String! 
    } 

    type User { 
    _id: ID! 
    firstName: String 
    lastName: String 
    email: String 
    cars: [Car] 
    } 

    type Car { 
    _id: ID 
    make: String 
    model: String 
    year: String 
    seller: User 
    } 

    type Query { 
    getUser(_id: ID!): User 
    getUsers: [User] 
    getCar(_id: ID!): Car 
    getCars: [Car] 
    } 

    type Mutation { 
    createUser(firstName: String, lastName: String, email: String): User 
    // change from _id to seller, due to base on logic _id conflict with CarId 
    createCar(seller: ID!, make: String, model: String, year: String): Car 
    } 

    schema { 
    query: Query 
    mutation: Mutation 
    } 
` 

的src/middlewares.js

import bodyParser from 'body-parser' 
import { graphqlExpress, graphiqlExpress } from 'apollo-server-express' 
import { makeExecutableSchema } from 'graphql-tools' 

import typeDefs from '../graphql/schema' 
import resolvers from '../graphql/resolvers' 
import constants from './constants' 

export const schema = makeExecutableSchema({ 
    typeDefs, 
    resolvers 
}) 

export default app => { 

    app.use('/graphiql', graphiqlExpress({ 
    endpointURL: constants.GRAPHQL_PATH 
    })) 

    app.use(
    constants.GRAPHQL_PATH, 
    bodyParser.json(), 
    graphqlExpress(req => ({ 
     schema, 
     context: { 
     event: req.event 
     } 
    })) 
) 
} 

enter image description here

enter image description here

enter image description here

enter image description here

+0

非常感謝您,表瞭解一對多通信,但如何使連接多對多? –

板凳
0
0

嘗試做這樣的事情在你的車解析器

export default { 
    getCar: ({ _id: ownId }, { _id }) => 
    Car.findById(ownId || _id); 
// here is the rest of your code 
地板
0
0

您需要在用戶類型添加一個解析器爲cars場。

const resolvers = { 
    Query: { 
    getUsers: ... 
    getCars: ... 
    ... 
    }, 
    Mutation: { 
    ... 
    }, 
    User: { 
    cars: ... 
    } 
} 
0
votes
answers
37 views
+10

如何將ServletRequest傳遞給在graphql-java中執行I/O的pojo

0

我需要根據請求將servlet屬性值傳遞給Query對象。我有這麼多的工作,但我怎樣才能從qt變量中獲得真正的查詢對象?如何將ServletRequest傳遞給在graphql-java中執行I/O的pojo

public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { 
    GraphQLSchema schema = getSchemaProvider().getSchema(); 
    //schema.transform(c -> {}); 
    GraphQLObjectType t = schema.getQueryType(); 
    String rootLib = (String) req.getAttribute("ROOTLIB"); 
    super.service(req, res); 
} 
沙发
0
0

延伸DefaultQLSchemaProvider並重寫的getSchema(請求:HttpServletRequest的):GraphQLSchema方法。 然後重寫GraphQLEndpoint ctor並在調用super(GrapQLProvider,...)ctor時創建schemaProvider。

0
votes
answers
45 views
+10

Github GraphQL API:我如何收集特定用戶的存儲庫?

2

我試圖獲取登錄名「somelogin」用戶的存儲庫。Github GraphQL API:我如何收集特定用戶的存儲庫?

它會返回所有的存儲庫,但我只想獲得他擁有的存儲庫。因爲新的API使用GraphQL我做不到。

目前我使用:

{ "query": "query { user(login:"furknyavuz") {repositories(first: 50) { nodes { name url }}}}" }

+0

你的意思是要排除叉?使用'isFork:false' –

+0

是的,我想排除不屬於我的所有存儲庫。 你能給我正確的使用它嗎。 –

沙发
0
2

您可以使用isFork: false排除叉。在explorer

{ 
    user(login: "furknyavuz") { 
    repositories(first: 50, isFork: false) { 
     nodes { 
     name 
     url 
     } 
    } 
    } 
} 

,捲曲:

curl -H "Authorization: bearer token" -d ' 
{ 
    "query": "query { user(login: "furknyavuz") { repositories(first: 50, isFork: false) { nodes { name url } } } }" 
} 
' https://api.github.com/graphql 
0
votes
answers
73 views
+10

如何通過Githubs GraphQL API存檔存儲庫?

2

我發現你可以通過REST API來做到這一點,但理想情況下我想堅持我的程序中的GraphQL API。我一直在搜索API Documentation,但我也很不穩定,並且對GraphQL很陌生,所以我似乎無法找到一種方法來修改存儲庫並設置歸檔狀態。如何通過Githubs GraphQL API存檔存儲庫?

我只需要歸檔,不需要解壓縮。

沙发
0
0

目前不可能,但您可以通過創建一個新帖子here並以標記schema-request來請求功能。