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: 25

0
votes
answers
13 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
20 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
15 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
18 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
10 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
21 views
+10

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

2

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

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

沙发
0
0

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

0
votes
answers
22 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
14 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
21 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
13 views
+10

GraphqlJS-類型衝突 - 不能使用聯合或接口

0
const { 
    makeExecutableSchema 
} = require('graphql-tools'); 
const resolvers = require('./resolvers'); 

const typeDefs = ` 

    type Link { 
    args: [Custom] 
    } 

    union Custom = One | Two 

    type One { 
    first: String 
    second: String 
    } 

    type Two { 
    first: String 
    second: [String] 

    } 

    type Query { 
    allLinks: [Link]! 

    } 

`; 

const ResolverMap = { 
    Query: { 
    __resolveType(Object, info) { 
     console.log(Object); 
     if (Object.ofType === 'One') { 
     return 'One' 
     } 

     if (Object.ofType === 'Two') { 
     return 'Two' 
     } 
     return null; 
    } 
    }, 
}; 

// Generate the schema object from your types definition. 
module.exports = makeExecutableSchema({ 
    typeDefs, 
    resolvers, 
    ResolverMap 
}); 


//~~~~~resolver.js 
const links = [ 
    { 
     "args": [ 
      { 
       "first": "description", 
       "second": "<p>Some description here</p>" 
      }, 
      { 
       "first": "category_id", 
       "second": [ 
        "2", 
        "3", 
       ] 
      } 

     ] 
    } 
]; 
module.exports = { 
    Query: { 
     //set data to Query 
     allLinks:() => links, 
     }, 
}; 

我很困惑,因爲graphql的紀錄片太糟糕了。我不知道如何設置resolveMap函數以便能夠在模式中使用union或interface。現在,當我使用查詢執行時,它顯示我生成的模式不能使用Interface或Union類型執行的錯誤。我該如何正確執行這個模式?GraphqlJS-類型衝突 - 不能使用聯合或接口

沙发
0
1

resolversResolverMap應該一起定義爲resolvers。另外,應該爲Custom聯合類型定義類型解析器,而不是Query

const resolvers = { 
    Query: { 
    //set data to Query 
    allLinks:() => links, 
    }, 
    Custom: { 
    __resolveType(Object, info) { 
     console.log(Object); 
     if (Object.ofType === 'One') { 
     return 'One' 
     } 

     if (Object.ofType === 'Two') { 
     return 'Two' 
     } 
     return null; 
    } 
    }, 
}; 

// Generate the schema object from your types definition. 
const schema = makeExecutableSchema({ 
    typeDefs, 
    resolvers 
}); 

更新: OP得到了一個錯誤"Abstract type Custom must resolve to an Object type at runtime for field Link.args with value "[object Object]", received "null"."。這是因爲解析器Object.ofType === 'One'Object.ofType === 'Two'中的條件始終是錯誤的,因爲在Object內沒有稱爲ofType的字段。所以解決的類型總是null

爲了解決這個問題,無論是ofTypeargs陣列(在resolvers.jslinks常數)添加到每個項目或變更的條件類似typeof Object.second === 'string'Array.isArray(Object.second)

+0

林現在收到錯誤:「'抽象類型的自定義必須解析運行時的對象類型,其值爲字段Link.args,值爲「[object Object] 」,收到「null」。「我必須定義'type Custom'嗎?它應該包含什麼? – Brunhilda

+1

我認爲這是因爲Object.ofType ==='One''和Object.ofType ==='Two''總是'false'。所以解析的類型總是爲null。嘗試在'args'數組中的每個項目中添加'ofType'字段('resolvers.js'中的'links'常量)。或者將條件改爲'typeof Object.second ==='string''和'Array.isArray(Object.second)'。我無法驗證,因爲我現在不在我的電腦。 – Bless

+0

哦,我的上帝,你,我愛你。我已經考慮了好幾個星期了,一羣人試圖幫助我,而且過了很長一段時間,終於有了一個答案。你是我的救星。你現在不知道我有多幸福。 – Brunhilda