2016-01-15 15 views
7

Tôi đã có ứng dụng nodejs xử lý các yêu cầu của người dùng và nhận cookie mà tôi muốn proxy vào dịch vụ API nội bộ. Làm cách nào để tiếp cận điều này bằng cách sử dụng tìm nạp nút?Làm cách nào để gửi cookie có tìm nạp nút?

Đừng cung cấp superagent.

Trả lời

10

Bạn sẽ có thể vượt qua cùng cookie bằng cách đặt nó trong tiêu đề của yêu cầu của bạn:

const opts = { 
    headers: { 
     cookie: 'accessToken=1234abc; userId=1234' 
    } 
}; 
const result = await fetch(`/some/url`, opts); 
-3

Bạn không cần nút-featch, bạn có thể đọc cookie của người dùng từ tiêu đề yêu cầu "Cookie". Xem https://nodejs.org/dist/latest-v5.x/docs/api/http.html#http_message_headers

Nhưng nếu bạn sử dụng yêu cầu tên miền chéo, bạn phải định cấu hình yêu cầu của khách hàng bằngCredential và thêm CORS-headers trên máy chủ. Thấy điều này: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

+0

Bạn đã hiểu lầm những gì tôi cố gắng đạt được. Nó không phải về máy khách đến máy chủ, nó là về máy chủ đến máy chủ. Tôi có yêu cầu đến trong ứng dụng nodejs. Có, tôi không cần tìm nạp nút để đọc cookie vì tôi đã có nó từ đối tượng yêu cầu. Những gì tôi cần là chuyển các cookie này với yêu cầu khác tới API bên ngoài. Có thể ủy quyền cho các cookie này bằng cách tìm nạp nút bằng cách nào đó hay không? – Skay

+0

Dưới đây là ví dụ về superagent - https://github.com/erikras/react-redux-universal-hot-example/blob/master/src/helpers/ApiClient.js#L33 - có thể thực hiện tương tự với tìm nạp nút? – Skay

-1

Đối với đơn giản, bạn có thể viết một middleware mà sẽ bao gồm các cookie để global.fetch , như dưới đây.

const realFetch = fetch; 

function cookieFetch(fetch, cookie) { 
    return (url, opts) => { 
    opts = opts || {}; 
    return fetch(url, Object.assign(opts, { 
     headers: Object.assign(opts.headers || {}, { cookie }) 
    })); 
    }; 
} 

function middleware(req, res, next) { 
    const kuki = req.headers.cookie; 
    global.fetch = kuki ? 
    cookieFetch(realFetch, kuki) : 
    realFetch; 
    next(); 
} 

module.exports = middleware; 
Các vấn đề liên quan