2017-07-02 22 views
0

我對ES本身很陌生,想知道爲什麼我無法將ServerResponse對象正確綁定到函數。 我已經得到了使用OAuth協議一個非常簡單的服務器:將ServerResponse對象綁定到函數

let saveToken = (response) => 
{ 
    console.log('\n') 
    console.log(this.constructor) // NOT OK [Function: Object] 

    this.writeHead(200, 
        { 
         'Set-Cookie': `${ACCES_TOKEN_COOKIE}=${JSON.parse(response.body).access_token}` 
        }) 

    this.send(body) 
} 

let requestToken = (code) => 
{ 
    console.log('\n') 
    console.log(this.constructor) // NOT OK [Function: Object] 

    unirest.post(OAUTH_ACCESS_URL) 
    .send({ 
       client_id: CLIENT_ID, 
       client_secret: CLIENT_SECRET, 
       code: code, 
       redirect_uri: REDIRECT_URI 
      }) 
    .end(saveToken.bind(this)) 

} 

let requestsHandler = (request, response) => 
{ 
    console.log('\n') 
    console.log(response.constructor) // OK { [Function: ServerResponse] } 

    let QUERY = url.parse(request.url, true).query; 

    if ('code' in QUERY) 
    { 
     requestToken.bind(response)(QUERY.code) 
    } else 
    { 

     fs.readFile(INDEX_PAGE_PATH, 
        'utf8', 
        (err, contents) => 
        { 
         response.send(contents) 
        }) 

    } 

} 

let app = express() 
app.get('/', requestsHandler) 

app.listen(PORT, 
      () => 
      { 
       console.log(`Server listening on :${PORT}`) 
      }) 

在這裏,我想結合內requestsHandlerServerResponse對象(response),以requestToken但好像我做錯了什麼,因爲this變只要requestToken被調用,一個普通的Object。 我在做什麼錯?

+0

代替'requestToken.bind(響應)(QUERY.code)''確實requestToken.call(響應,QUERY。代碼)'工作? –

+0

另外,是否有任何理由不能將服務器響應作爲參數傳遞而不是嘗試綁定它? –

+0

我發現'unirest'使用的'request'模塊將其他對象綁定到它的例程中的回調函數 –

回答

0

我想出通過unirest利用request模塊結合其他對象到回調內它的例程