我已经配置并设置了一个功能齐全的 express-nextjs-graphql-apollo 应用程序,它可以登录/注销用户,并完美地执行 CRUD。最后一个非常重要的步骤是在客户端显示错误消息。
到目前为止,我只在控制台中收到此红色错误: POST http://localhost:3000/graphql 500 (Internal Server Error)
例如,登录表单验证。当没有提供输入时,它应该得到一个无效的输入错误消息,或者E-Mail is invalid如果电子邮件格式不正确。
以下在 graphql 中测试的变异代码localhost:3000/graphql:
mutation {
login(userInput: {email:"" password:""}){
userId
}
}
Run Code Online (Sandbox Code Playgroud)
返回下面的消息。我实际上希望此消息显示在客户端上。
{
"errors": [
{
"message": "Please provide input.",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"login"
]
}
],
"data": null
}
Run Code Online (Sandbox Code Playgroud)
我还尝试使用 onError 在 Mutation 组件内的客户端上显示错误消息:
onError={error => {
console.log("ERROR in SigninBox component ", error);
}}
Run Code Online (Sandbox Code Playgroud)
这仅在控制台中显示此错误消息: Response not successful: Received status code 500
这是我 …
有一种方法来获取与有条件的东西GQL使用@include(if: $withFriends)
query Hero($episode: Episode, $withFriends: Boolean!) {
hero(episode: $episode) {
name
friends @include(if: $withFriends) {
name
}
}
}
Run Code Online (Sandbox Code Playgroud)
但如果$withFriends是假的,我想获取其他东西。我可以通过传递额外的变量来实现它$notWithFriends
query Hero($episode: Episode, $withFriends: Boolean!) {
hero(episode: $episode) {
name
friends @include(if: $withFriends) {
name
}
appearsIn @include(if: $notWithFriends)
}
}
Run Code Online (Sandbox Code Playgroud)
像这样:@include(else: $withFriends)或@include(ifNot: $withFriends)或@include(if: !$withFriends)
我是 GraphQL 和 Apollo 的新手,我真的很难在 node.js 中设置 apolloClient。
首先我想提一下,我使用nuxt 的 apollo 模块成功地在 nuxt 中设置了一个 apollo 客户端。
所以我完全确定我的端点和我的令牌正在工作。
现在我想在一个 JavaScript 文件中设置一个 apollo 客户端,我想在 node.js 中运行它。
import fetch from 'node-fetch'
import gql from 'graphql-tag'
import { ApolloClient } from 'apollo-client'
import { createHttpLink } from 'apollo-link-http'
import { setContext } from 'apollo-link-context'
export default function generateRoutesFromData(
options = {
api: [],
query: '',
token: '',
bundle: '',
homeSlug: 'home',
errorPrefix: 'error-'
}
) {
const uri = 'https://example.com/api'
const token …Run Code Online (Sandbox Code Playgroud) 我正在尝试遵循此示例,https://www.apollographql.com/docs/apollo-server/deployment/lambda/创建一个无服务器 GraphQL 服务器,该服务器返回“Hello world”。
根目录基本上只包含两个文件,graphql.js以及serverless.yml:
> tree . -I node_modules
.
??? graphql.js
??? package-lock.json
??? package.json
??? serverless.yml
Run Code Online (Sandbox Code Playgroud)
其中,如示例中所示,graphql.js读取
const { ApolloServer, gql } = require('apollo-server-lambda');
const typeDefs = gql`
type Query {
hello: String
}
`;
const resolvers = {
Query: {
hello: () => 'Hello world!',
},
}
const server = new ApolloServer({ typeDefs, resolvers });
exports.graphqlHandler = server.createHandler();
Run Code Online (Sandbox Code Playgroud)
并serverless.yml阅读
service: apollo-lambda
provider:
name: aws
runtime: nodejs8.10 …Run Code Online (Sandbox Code Playgroud) 我是React Native和 的新手Apollo-Client。在我的屏幕中有三个选项卡,各个选项卡正在调用自己的数据。但是由于useQuery用户界面完全冻结并提供非常糟糕的体验。
有没有其他方法可以useQuery以异步方式或在任何后台任务中调用?
编辑
function PlayerList(props) {
const [loading , setloading] = useState(true)
const [data, setData] = useState()
const [loadData, { tempLoading, tempError, tempData }] = useLazyQuery(query);
async function getData(){
loadData()
}
useEffect(() => {
if (tempData == undefined) {
getData()
}
})
if(tempLoading){
return
<View >....</View>
}
if(tempData) {
return ( <View> ... </View>) }
}
Run Code Online (Sandbox Code Playgroud)
请找到上面的代码以便更好地理解。
我很惊讶我找不到一个库或示例来执行以下操作:
我想要对服务器的每个请求的简单服务器日志,该日志将说明请求的查询或更改,以及完成请求所用的时间
我知道有插件和扩展框架。但我不确定在两个回调之间保持状态的最佳做法是什么:requestDidStart和willSendResponse
会吐出的东西:
path="createAccountMutation" service=20ms
Run Code Online (Sandbox Code Playgroud)
额外的功劳是显示有效载荷的大小
path="createAccountMutation" service=20ms bytes=355
Run Code Online (Sandbox Code Playgroud)
很想在打字稿中看到解决方案
注意:我找到了apollo-log——但它不做请求持续时间
谢谢!
我在前端使用 React 和 Graphql,在后端使用 Django 和 Graphene。
我希望能够下载报告的 pdf 文件。我尝试使用突变来做到这一点,如下所示:
const [createPdf, {loading: createPdfLoading, error: createPdfError}] = useMutation(CREATE_PDF)
const handleCreatePDF = async (reportId) => {
const res = await createPdf({variables: {reportId: parseInt(reportId) }})
debugger;
};
export const CREATE_PDF = gql`
mutation ($reportId: Int!) {
createPdf (reportId: $reportId){
reportId
}
}
`;
Run Code Online (Sandbox Code Playgroud)
在后端,我有这样的事情:
class CreatePDFFromReport(graphene.Mutation):
report_id = graphene.Int()
class Arguments:
report_id = graphene.Int(required=True)
def mutate(self, info, report_id):
user = info.context.user
if user.is_anonymous:
raise GraphQLError("You are not logged in!")
report …Run Code Online (Sandbox Code Playgroud) 我有这个 schema.graphql
### This file was generated by Nexus Schema
### Do not make changes to this file directly
type AuthPayload {
token: String!
users: users!
}
scalar DateTime
type Mutation {
login(email: String, password: String): AuthPayload!
signup(CREATED_BY: String, EMAIL: String, FIRST_NAME: String, IS_ACTIVE: Boolean, PASSWORD: String, USERNAME: String): AuthPayload!
}
type Query {
me: users
}
type users {
CREATED_BY: String!
CREATED_ON: DateTime
EMAIL: String!
FIRST_NAME: String!
id: Int!
IS_ACTIVE: Boolean!
LAST_NAME: String
MODIFIED_BY: String
MODIFIED_ON: DateTime
ORGANIZATION_ID: String …Run Code Online (Sandbox Code Playgroud) Vue-Apollo 3.04的发行说明指出现在有Apollo Client 3支持。由于该文档阿波罗客户端3声明ApolloClient, InMemoryCache,HttpLink,现在都在一个 @apollo/client封装-不像以前的单包。
https://github.com/vuejs/vue-apollo/releases/tag/v3.0.4
https://www.apollographql.com/docs/react/migrating/apollo-client-3-migration/
但是,Vue-Apollo ( apollo-client-> @apollo/client?)的文档中没有关于如何应用新更改的更改。另外, 阿波罗客户端3 Doc's指出,对于Vue公司,你必须导入ApolloClient从@apollo/client/core
所以我以自己的方式尝试过,但我的导入似乎失败了。我从npmm run serve. 看来他想进口一些react东西。
ERROR Failed to compile with 8 errors 20:25:20
This dependency was not found:
* react in ./node_modules/@apollo/client/react/context/ApolloConsumer.js, ./node_modules/@apollo/client/react/context/ApolloContext.js and 6 others
To install it, you can run: npm install --save react
Run Code Online (Sandbox Code Playgroud)
vue-apollo.js(来自有效的旧项目)
import Vue from 'vue'
import { …Run Code Online (Sandbox Code Playgroud) 这是我的两个文件。我试图用我自己的数据模拟这个沙箱的结果:https : //codesandbox.io/embed/stoic-haze-ispw2?codemirror=1
基本上我可以看到数据被获取并更新了缓存,但我的组件 ResourceSection 数据列表没有更新。
[更新] 根据反馈进行了一些重大更改。从组件中删除了查询,我创建了一个 skipLimitPagination 函数。查询有效,但我的缓存没有更新或将数据放入其中。
import React from "react";
import { BrowserRouter as Router } from "react-router-dom";
import "./App.css";
import { ApolloClient, InMemoryCache, ApolloProvider } from "@apollo/client";
import Home from "./screens";
import { skipLimitPagination } from './utils/utilities'
const client = new ApolloClient({
uri: `https://graphql.contentful.com/content/v1/spaces/${process.env.REACT_APP_SPACE_ID}/?access_token=${process.env.REACT_APP_CDA_TOKEN}`,
cache: new InMemoryCache({
typePolicies: {
Query: {
fields: {
resourceCollection: {items: skipLimitPagination()}
}
}
}
}),
});
function App() {
return (
<ApolloProvider client={client}>
<Router>
<Home />
</Router>
</ApolloProvider>
); …Run Code Online (Sandbox Code Playgroud) apollo ×10
graphql ×9
javascript ×2
reactjs ×2
apollo-boost ×1
django ×1
graphql-js ×1
node.js ×1
prisma ×1
python ×1
react-hooks ×1
react-native ×1
relay ×1
serverless ×1
typescript ×1
vue-apollo ×1
vue.js ×1
vuejs2 ×1