我使用 apollo-server 编写 graphql 代码。在发送数据之前,我想根据可选字段和过滤器对数据进行某种排序,并且我需要知道编写代码的正确方法?graphql中有没有一种方法可以自动对我的数据进行排序?
我使用lodash进行排序,我认为在我搜索后我看到了prisma但它们没有优化,但我的数据是由另一个不在数据库中的 api 返回的。我需要像棱镜这样的东西。
我的代码是这样的,我想根据查询中的名称或姓氏对书籍进行排序,但在 api 返回的实际书籍对象中。
const { ApolloServer, gql, } = require('apollo-server');
const books = [
{
title: 'Harry Potter and the Chamber of Secrets',
authors: [{"name":"a1", "lastName":"aa1"},{"name":"b1", "lastName":"bb1"},{"name":"c1", "lastName":"cc1"}]
},
{
title: 'Jurassic Park',
authors: [{"name":"a" ,"lastName":"aa"},{"name":"b", "lastName":"bb"},{"name":"c", "lastName":"cc"}]
},
];
const typeDefs = gql`
type Book {
title: String
authors: [Author]
}
type Query{
books: [Book]
}
type Author{
name: String
lastName: String
}
`;
const resolvers = { …Run Code Online (Sandbox Code Playgroud) 如何检索 graphql 中枚举类型的所有值?
\n\n例子:
\n\n enum TRUCKPE_NAME {\n TATA_407\n TATA_709\n TATA_1106\n ECHIER_1103\n}\n\ntype Document {\n truckType: TRUCKPE_NAME\n}\nRun Code Online (Sandbox Code Playgroud)\n\n我想获取上面枚举中的所有名称。就像是
\n\nconsole.log(prisma.Documents().truckType())\n\n// output\n\nTATA_407\nTATA_709\nTATA_1106\nECHIER_1103\nRun Code Online (Sandbox Code Playgroud)\n 我有以下功能:
import ApolloClient from 'apollo-boost'
import gql from 'graphql-tag'
import fetch from 'node-fetch'
global.fetch = fetch
const client = new ApolloClient({
uri: 'myUri'
})
const getPostsByCategory = async category => {
const res = await client.query({
query: gql`
query articlesByCategory($id: String!) {
postsByCategory(id: $id) {
id
}
}
`
})
console.log('res', res)
}
Run Code Online (Sandbox Code Playgroud)
我想调用该函数:
await getPostsByCategory('news')
Run Code Online (Sandbox Code Playgroud)
但是我只是不明白如何将类别变量传递到查询中。我想在查询中使用qraphql-tag而不是传递简单的标记文字作为查询。
我刚开始将 amplify 与 GraphQL 结合使用。我正在设置数据库模式并在运行放大推送后自动生成函数。
\n我想要实现但不知道如何实现的目标
\n当调用API生成的函数来获取用户时,
\nlet user = await API.graphql(graphqlOperation(getUser,{id:userId}))\nRun Code Online (Sandbox Code Playgroud)\n我正在获取一个用户对象,但是,它看起来像这样 - 即使我确信数据库中的数据设置正确。
\nbuttons: {nextToken: null} -- WANT THIS TO INCLUDE ACTUAL INFORMATION ABOUT BUTTONS CONNECTED TO THIS USER\ncreatedAt: "2020-09-02T23:41:12.278Z"\ncustomStyles: {id: "e3d1bbef-ec6f-4a6d-9b5d-e693e890d4e0", bgColor: "F9FF9F", bgBtnColor: "FFFFFF", bgBtnHoverColor: "000000", textColor: "000000", \xe2\x80\xa6}\ndefaultStyles: null\nemail: "nata@email.edu"\nfirstName: "Nata"\nid: "d683a6bb-383e-4cf1-943a-05b3da4e5cc3"\nlastName: "Vache"\nsocialNetwork: {nextToken: null} -- WANT THIS TO INCLUDE ACTUAL INFORMATION ABOUT SOCIAL NETWORKS CONNECTED TO THIS USER, THE …Run Code Online (Sandbox Code Playgroud) amazon-web-services amplifyjs graphql-js aws-amplify graphql-schema
我正在使用 apollo 客户端对 graphql 查询做出反应,现在我有一个问题,虽然我使用 useLazyQuery 钩子以编程方式查询,但是当我第二次查询时, onCompleted 回调实际上没有触发,网络请求实际上已完成并且 1 索引中的状态该钩子的返回值正在更新
const [getUser, getUserStatus] = useLazyQuery(GET_USER, {
fetchPolicy: 'no-cache',
notifyOnNetworkStatusChange: true,
// this callback is not triggering 2nd call of getUser
onCompleted: (data) => {
const { customerCart, customer } = data;
if (!id) {
dispatch(updateCartId(customerCart.id));
}
if (id !== customerCart.id) {
mergeCart({
variables: { cartId: id, cartIdToMerge: customerCart.id },
});
}
dispatch(updateUser(customer));
},
onError: (error) => {
checkHasAuth(error);
},
});
useEffect(() => {
if (token) {
// here i …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 GraphQL 跨多个字段搜索字符串。
我能够将过滤函数与 or 字段一起使用,但它没有检索任何内容。我希望能够检索一个数组,其中包含标题或/和正文 ==> 中包含搜索字符串的所有项目,因此如果在标题或正文中找到查询字符串,则将其检索到数组中。
我的代码是:
const search_reviews= gql`
query SearchReviews ($my_query: String) {
reviews (filters: {title: {contains: $my_query}, or: {body: {contains: $my_query}} }) {
data{
id
attributes{
title
rating
body
categories{
data{
id
attributes
{
name
}
}
}
}
}
}
}
`
Run Code Online (Sandbox Code Playgroud)
仅适用于一个字段,但我想在两个字段中都有它
const search_reviews= gql`
query SearchReviews ($my_query: String!) {
reviews (filters: {body: {contains: $my_query} }) {
data{
id
attributes{
title
rating
body
categories{
data{
id
attributes
{
name
}
}
}
} …Run Code Online (Sandbox Code Playgroud) 我收到了这种类型的查询
query {
searchRandom (param : MyObjectClass){
city
}
}
Run Code Online (Sandbox Code Playgroud)
如何设置 param 的类型MyObjectClass并将其传递到查询中?能在这里测试吗?
我想与多个GraphQL类型共享一个nodeInterface.目前收到此错误:
Error: User may only implement Interface types, it cannot implement: undefined.
Run Code Online (Sandbox Code Playgroud)
我已经声明了这样的界面:
// file: node-interface.js
let {nodeInterface, nodeField} = nodeDefinitions(
(globalId) => {
let {type, id} = fromGlobalId(globalId);
if (type === 'UserModel') {;
return UserModel.findOne(id).exec();
}
return null;
},
(obj) => {
if (obj instanceof UserModel) {
return UserType;
}
return null;
}
);
export { nodeInterface };
export { nodeField };
and attempting to use it in my UserType like this
// file: user.js
import {
nodeInterface
} …Run Code Online (Sandbox Code Playgroud) 我有一个同构的React应用程序,组件在服务器端呈现.我希望使用第三方React组件:(GraphiQL),并且呈现如下:
var GraphiQLComponent = React.createElement(GraphiQL, { fetcher: graphQLFetcher}, "");
router.get('/graphiql', function (req, res) {
res.send(ReactDOMServer.renderToString(GraphiQLComponent));
});
Run Code Online (Sandbox Code Playgroud)
但是,此组件使用window对象:window.localStorage并且window.addEventListener,当我尝试在浏览器中加载页面时,我收到错误:
ReferenceError: window is not defined
Run Code Online (Sandbox Code Playgroud)
我可以在服务器上渲染使用窗口对象的React组件吗?如果是这样,我需要做些什么来解决此错误?
有没有办法通过创建多个rootQuery对象并在架构中将它们组合在一起来重构rootQuery对象?
所以现在我们有一个rootQuery充满了多个根,然后我们创建了一个架构,说我们有一个根查询.我们写的是
var schema = new GraphQLSchema({
query: RootQuery
})
Run Code Online (Sandbox Code Playgroud)
我想要的是什么样的
var schema = new GraphQLSchema({
query: [RootQuery1, RootQuery2]
})
Run Code Online (Sandbox Code Playgroud)
有没有办法在GraphQL中做到这一点?它将有助于重构.
graphql-js ×10
graphql ×6
javascript ×3
node.js ×2
reactjs ×2
amplifyjs ×1
apollo ×1
aws-amplify ×1
graphql-java ×1
prisma ×1
refactoring ×1
relayjs ×1
sorting ×1