Verwendet derzeit Angular 7, apollo-rest link 0.7.3
Endlich funktioniert die Mutation teilweise und es gibt ein Problem, bei dem global
nicht initialisiert ist und diesen Fehler verursacht:
core.js:15724 ERROR Error: Network error: global is not defined
at new ApolloError (bundle.esm.js:60)
at Object.error (bundle.esm.js:1032)
at notifySubscription (Observable.js:134)
at onNotify (Observable.js:165)
at SubscriptionObserver.error (Observable.js:224)
at Object.error (Observable.js:463)
at notifySubscription (Observable.js:134)
at onNotify (Observable.js:165)
at SubscriptionObserver.error (Observable.js:224)
at bundle.umd.js:807
Ich initialisiere den Client
const restLink = new RestLink({
uri: 'http://localhost:5000/api',
credentials: 'same-origin',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json'
}
});
return {
link: restLink,
cache
};
Ich habe diese Mutation:
export const addTodo = gql`
mutation addTodo($input: Todo!){
addTodo(input: $input) @rest( type: "Todo", method: "POST", path: "/todos" ) {
...todoFragment
}
}
${todoFragment}
`;
Ich führe es so aus:
add(text: string): void {
this.apollo.mutate({
mutation: addTodo,
variables: {
input: {
description: text,
completed: false
}
}
}).subscribe(({data}) => {
console.log('got data', data);
}, (error) => {
console.log('there was an error sending the query', error);
});
Die Zeile, die den Fehler verursacht, ist unten auf dem Bild
Haben Sie eine Idee, warum dieses globale Objekt global.FileList
definiert ist?
// FileList/File are only available in some browser contexts
// Notably: *not available* in react-native.
if ((global.FileList && object instanceof FileList) ||
(global.File && object instanceof File)) {
// Object is a FileList or File object => no keys to convert!
return object;
}
Dies scheint zunächst ein Winkel-Cli-Problem zu sein, da ich der polyfills.ts eine Linie hinzufügen musste
https://github.com/angular/angular-cli/issues/8160
Aber die Antwort dafür lautet: globals does not exists in browser and should not be in the client-side code
?
Sollte es im REST LINK drin sein?
Das ist mir neu, in React-Native und anderen Umgebungen existiert global
? Im Browser ist das global
Objekt das Fenster, also könnten Sie etwas tun wie: window.global = window
um sicherzustellen, dass es existiert?
Das, was ich getan habe, war wie auf dem Angular vorgeschlagen, aber sie betrachten dies als Scheiße. das habe ich ganz unten gemacht:
https://github.com/fkolar/todo-rest/blob/master/src/polyfills.ts
Ich stimme zu, dass dies ein Hack ist, aber nur Sie wissen, ob Ihr Code in einem Browser oder auf Reactive-Native ausgeführt werden soll. Wenn Sie einen besseren Weg zum Schreiben von Apollo-Link-Rest kennen/verlinken können, würde ich eine Änderung unterstützen! Leider existiert window
nicht auf dem Handy, also stecken wir hier ein bisschen fest!
Ich habe gerade auf dieses Problem gestoßen. Gibt es bereits eine Lösung?