2015-05-29 17 views
7

issue trong kho lưu trữ SuperAgent đề cập đến phương thức .use để thêm logic vào mỗi yêu cầu. Ví dụ, thêm một tiêu đề Authorization cho JWT khi một mã thông báo đã có sẵn:".use" để thêm logic vào mỗi yêu cầu của SuperAgent

superagent.use(bearer); 

function bearer (request) { 
    var token = sessionStorage.get('token'); 

    if (token) request.set('Authorization', 'Bearer ' + token); 
} 

Mặc dù bình luận cuối cùng thông báo rằng tính năng này hoạt động trở lại, tôi không thể làm cho nó để làm việc.

Các mã kiểm tra sau đây:

var request = require('superagent'); 

request.use(bearer); 

function bearer (request) 
{ 
    // "config" is a global var where token and other stuff resides 
    if (config.token) request.set('Authorization', 'Bearer ' + config.token); 
} 

Returns lỗi này:

request.use(bearer); 
     ^
TypeError: undefined is not a function 
+1

Vui lòng giải thích lý do bạn downvoted câu hỏi: http://meta.stackexchange.com/questions/135/encouraging-people-to-explain-downvotes –

+0

chức năng 'request' được xuất bởi superagent không có phương thức 'use'. tuy nhiên, thể hiện của 'Request' được trả về bằng cách thực thi' request'. Có hay không đây là một lỗi, hoặc có thể được sửa mà không có yêu cầu kéo là không rõ ràng. –

+0

Nói cách khác, lỗi bạn đang nhận được dự kiến, dựa trên việc xem xét nguồn. Readme cũng không hiển thị một ví dụ về số tiền sử dụng của bạn, do đó, nó (usecase) của bạn có thể không phải là một mục đích sử dụng. –

Trả lời

8

Vấn đề bạn liên kết với không liên kết với bất kỳ cam kết, vì vậy tất cả chúng ta có thể làm là suy đoán về việc có hay không phải tính năng đó đã được triển khai và sau đó bị xóa hoặc không bao giờ được triển khai ngay từ đầu.

Nếu bạn read through the src, bạn sẽ thấy rằng use chỉ được xác định trên nguyên mẫu của hàm tạo Request, có nghĩa là nó chỉ có thể được sử dụng sau khi bạn bắt đầu xây dựng yêu cầu, as shown in the readme.

Nói cách khác, vấn đề dường như đang nói về một đối tượng địa lý đã bị xóa hoặc chưa từng tồn tại. Thay vào đó, bạn nên sử dụng cú pháp được đề cập trong readme.

var request = require('superagent'); 

request 
.get('/some-url') 
.use(bearer) // affects **only** this request 
.end(function(err, res){ 
    // Do something 
}); 

function bearer (request){ 
    // "config" is a global var where token and other stuff resides 
    if (config.token) { 
     request.set('Authorization', 'Bearer ' + config.token); 
    } 
} 

Bạn dĩ nhiên có thể tạo ra wrapper của riêng bạn để bạn không cần phải làm điều đó cho mọi yêu cầu.

var superagent = require('superagent'); 

function request(method, url) { 
    // callback 
    if ('function' == typeof url) { 
     return new superagent.Request('GET', method).end(url).use(bearer); 
    } 

    // url first 
    if (1 == arguments.length) { 
     return new superagent.Request('GET', method).use(bearer); 
    } 

    return new superagent.Request(method, url).use(bearer); 
} 
// re-implement the .get and .post helpers if you feel they're important.. 

function bearer (request){ 
    // "config" is a global var where token and other stuff resides 
    if (config.token) { 
     request.set('Authorization', 'Bearer ' + config.token); 
    } 
} 

request('GET', '/some-url') 
.end(function(err, res){ 
    // Do something 
}); 
1

Gần đây, gói superagent-use đã được phát hành để tạo điều kiện thiết lập sử dụng trên toàn cầu cho các yêu cầu superagent.

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