Tôi đang sử dụng Angular2 RC5 (lõi, http, v.v.) và cố gắng kết nối với máy chủ Node.js được bật CORS. Ứng dụng của tôi được tạo mới từ Angular-CLI (phiên bản: "1.0.0-beta.11-webpack.2").Angular2 Http đặt tiêu đề Access-Control-Allow-Origin và http CORS
// src/app/app.component.ts
...
ngOnInit() {
const headers: Headers = new Headers();
headers.append('Accept', 'application/json');
headers.append('Content-Type', 'application/json');
headers.append('Access-Control-Allow-Origin', '*');
const options = new RequestOptions({
headers: headers
});
this.http.get('http://localhost:9000/api/v1/users', options)
.map((res: Response) => res.json())
.subscribe(users => console.log(users));
}
...
Khi ứng dụng bắt đầu, móc OnInit
đã gọi, tôi nhận được một lỗi trong giao diện điều khiển. Đây là thông báo lỗi mà tôi nhận được.
EXCEPTION: TypeError: Cannot read property 'toString' of null
browser_adapter.js:84EXCEPTION: TypeError: Cannot read property 'toString' of nullBrowserDomAdapter.logError @ browser_adapter.js:84BrowserDomAdapter.logGroup @ browser_adapter.js:94ExceptionHandler.call @ exception_handler.js:65(anonymous function) @ application_ref.js:267ZoneDelegate.invoke @ zone.js:323onInvoke @ ng_zone_impl.js:53ZoneDelegate.invoke @ zone.js:322Zone.run @ zone.js:216(anonymous function) @ zone.js:571ZoneDelegate.invokeTask @ zone.js:356onInvokeTask @ ng_zone_impl.js:44ZoneDelegate.invokeTask @ zone.js:355Zone.runTask @ zone.js:256drainMicroTaskQueue @ zone.js:474
zone.js:461 Unhandled Promise rejection: Cannot read property 'toString' of null ; Zone: <root> ; Task: Promise.then ; Value: TypeError: Cannot read property 'toString' of null(…)consoleError @ zone.js:461_loop_1 @ zone.js:490drainMicroTaskQueue @ zone.js:494
zone.js:463 Error: Uncaught (in promise): TypeError: Cannot read property 'toString' of null(…)
Nếu tôi thả ra khỏi options
và header
hoàn toàn, tôi đã nhận lỗi CORS nhưng tình trạng phản ứng 200 từ máy chủ. (Tôi đoán rằng Nếu tôi có thể vượt qua các tiêu đề chính xác, cần làm việc.)
this.http.get('http://localhost:9000/api/v1/users')
.map((res: Response) => res.json())
.subscribe(users => console.log(users));
Đây là lỗi từ giao diện điều khiển
XMLHttpRequest cannot load http://localhost:4000/api/v1/users. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4200' is therefore not allowed access.
browser_adapter.js:93EXCEPTION: Response with status: 0 for URL: null
browser_adapter.js:84EXCEPTION: Response with status: 0 for URL: nullBrowserDomAdapter.logError @ browser_adapter.js:84BrowserDomAdapter.logGroup @ browser_adapter.js:94ExceptionHandler.call @ exception_handler.js:65next @ application_ref.js:348schedulerFn @ async.js:89SafeSubscriber.__tryOrUnsub @ Subscriber.js:225SafeSubscriber.next @ Subscriber.js:174Subscriber._next @ Subscriber.js:124Subscriber.next @ Subscriber.js:88Subject._finalNext @ Subject.js:128Subject._next @ Subject.js:120Subject.next @ Subject.js:77EventEmitter.emit @ async.js:77onHandleError @ ng_zone_impl.js:74ZoneDelegate.handleError @ zone.js:327Zone.runTask @ zone.js:259ZoneTask.invoke @ zone.js:423
Subscriber.js:229Uncaught Response with status: 0 for URL: null
Có thể ai đó giúp đỡ, xin vui lòng? cảm ơn.
Cảm ơn bạn đã cho ý kiến. Máy chủ của tôi được bật CORS và có thể trả lại tải trọng. Dưới đây là câu hỏi chung chung hơn, nếu tôi chỉ muốn chuyển giá trị tiêu đề tùy chỉnh qua Angular2 HTTP, tôi có thể làm như thế nào? Tôi đã làm nó trong phiên bản beta của Angular2. Bây giờ trong RC5, @ góc/http có thay đổi chữ ký gọi không? – MMA
Trong trường hợp đó tôi sợ rằng tôi sẽ không thể giúp bạn. Mã của bạn có vẻ hoàn toàn hợp pháp với tôi. Tôi sẽ cố gắng tái tạo vấn đề vào ngày mai. –
Tuy nhiên, tôi khuyên bạn nên kiểm tra xem có tiêu đề 'Access-Control-Allow-Origin' hiện tại trên phản hồi từ máy chủ cho biết lỗi thứ hai gợi ý khác không. Cũng xin lưu ý rằng tiêu đề 'Access-Control-Allow-Origin' là tiêu đề phản hồi và không có lý do gì để đưa nó vào yêu cầu. –