2017-09-24 41 views
5

Tôi muốn gửi yêu cầu GET tới API bên ngoài mà tôi không kiểm soát. Vì tính bảo mật trên API, ứng dụng phản ứng của tôi không thể trực tiếp thực hiện yêu cầu ajax đến điểm cuối. Vì vậy, tôi đang cố gắng để tạo ra một proxy đơn giản như chứng minh hereCách tạo proxy trong React/Webpack để gọi API bên ngoài

My package.json file trông như thế này:

{ 
    "name": "my-stack", 
    "version": "0.1.0", 
    "private": true, 
    "dependencies": { 
    "react": "^15.6.1", 
    "react-dom": "^15.6.1", 
    "react-router-dom": "^4.2.2", 
    "react-scripts": "1.0.13" 
    }, 
    "scripts": { 
    "start": "react-scripts start", 
    "build": "react-scripts build", 
    "test": "react-scripts test --env=jsdom", 
    "eject": "react-scripts eject" 
    }, 
    "proxy": { 
    "https://gold-feed.com/paid/*": { 
     "target": "https://gold-feed.com/paid", 
     "changeOrigin": true 
    } 
    } 
} 

Và sau đó yêu cầu ajax của tôi trông như thế này:

const apiUrl = 'https://gold-feed.com/paid/<apiID>/all_metals_json_usd.php'; 

jQuery.ajax({ 
    method: 'GET', 
    url: apiUrl, 
    success: (item) => { 
    this.props.addItem(item); 
    } 
}); 

Nhưng nó doesn' t dường như đang làm bất cứ điều gì. Tôi vẫn nhận được lỗi sau:

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access. 

tôi về cơ bản có cùng một vấn đề như tài liệu here nơi ông đang cố gắng để tạo ra một proxy để truy cập vào api hơi.

Và chỉ là một lưu ý phụ, tôi tin rằng dự án tạo phản ứng-ứng dụng mà tôi đang sử dụng là không hoạt động trên webpack.

+0

Rất thú vị câu hỏi của bạn, tôi không phải là chuyên gia trong React, nhưng, có vẻ như không có cấu hình proxy, trình duyệt đang thực hiện yêu cầu và tất nhiên, chính sách CORS được áp dụng. Cách để thực hiện bởi bản thân mình nên, phơi bày một API Rest trong nút và là backend người yêu cầu api, và giao diện người dùng của tôi chỉ giao tiếp với backend của tôi để phía trước không quan tâm đến vấn đề CORS với apis của bên thứ ba. Sử dụng các trục trong kiến ​​trúc phản ứng/redux có thể giải quyết được vấn đề, nhưng tôi không chắc chắn là – Kalamarico

+0

Tôi đã gặp vấn đề tương tự nhưng tôi đã sửa nó bằng cách đơn giản thực hiện '' '" proxy ": " https: // gold- feed.com/paid/ "}' ''. Bạn có thể thử như thế không? –

+0

Tôi sẽ thử điều đó. Bạn đặt nó trong package.json? – reknirt

Trả lời

1

Bạn có thể hình dung nó ra bây giờ nhưng đối với những người khác ở đây là những gì làm việc cho tôi:

"proxy": { 
    "/proxy": { 
     "target": "https://mybackend.com", 
     "pathRewrite": {"^/proxy" : ""}, 
    "changeOrigin": true 
} 

nên myreact.com/proxy/my/path được chuyển hướng đến mybackend.com/my/path

Tôi nghĩ rằng lỗi trong trường hợp của bạn là bạn đặt đích làm khóa cho proxy của bạn thay vì đường dẫn trên máy chủ phản hồi của bạn.

Các vấn đề liên quan