تستخدم حاليًا Angular 7 ، رابط أبولو-ريست 0.7.3
أخيرًا حصلت على الطفرة تعمل جزئيًا وهناك مشكلة واحدة حيث لم يتم تهيئة global
وتسبب هذا الخطأ:
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
أقوم بتهيئة العميل
const restLink = new RestLink({
uri: 'http://localhost:5000/api',
credentials: 'same-origin',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json'
}
});
return {
link: restLink,
cache
};
لدي هذه الطفرة:
export const addTodo = gql`
mutation addTodo($input: Todo!){
addTodo(input: $input) @rest( type: "Todo", method: "POST", path: "/todos" ) {
...todoFragment
}
}
${todoFragment}
`;
أقوم بتنفيذها على النحو التالي:
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);
});
السطر الذي يسبب الخطأ أدناه في الصورة
هل لديك فكرة لماذا هذا الكائن العالمي global.FileList
غير محدد؟
// 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;
}
يبدو أن هذا في البداية مشكلة زاوية cli حيث اضطررت إلى إضافة سطر إلى polyfills.ts
https://github.com/angular/angular-cli/issues/8160
لكن الرد على هذا مثل: globals does not exists in browser and should not be in the client-side code
؟
هل يجب أن يكون هناك في REST LINK؟
هذه أخبار بالنسبة لي ، في React-Native والبيئات الأخرى ، هل يوجد global
؟ في المتصفح ، الكائن global
هو النافذة ، لذا يمكنك القيام بشيء مثل: window.global = window
لضمان وجوده؟
الشيء الذي فعلته كان كما هو مقترح في Angular لكنهم يعتبرون هذا هيكًا. هذا ما فعلته في الأسفل:
https://github.com/fkolar/todo-rest/blob/master/src/polyfills.ts
أوافق على أن هذا اختراق ، لكنك فقط تعرف ما إذا كان من المفترض أن تعمل التعليمات البرمجية الخاصة بك في متصفح أو على تفاعل أصلي. إذا كنت تعرف / يمكنك الارتباط بطريقة أفضل لكتابة Apollo-link-rest ، فسأؤيد التغيير! لسوء الحظ ، window
غير موجود على الهاتف المحمول ، لذلك نحن عالقون هنا قليلاً!
لقد تطرقت للتو إلى هذه القضية .. هل يوجد حل بالفعل؟