【发布时间】:2017-12-05 20:58:33
【问题描述】:
我对 ES 本身还是很陌生,想知道为什么我不能正确地将 ServerResponse 对象绑定到函数。 我有一个使用 OAuth 协议的非常简单的服务器:
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}`)
})
在这里,我试图将ServerResponse 对象(response)绑定到requestsHandler 内的requestToken,但似乎我做错了什么,因为this 立即变为普通的Object requestToken 正在被调用。
我做错了什么?
【问题讨论】:
-
requestToken.call(response, QUERY.code)可以代替requestToken.bind(response)(QUERY.code)工作吗? -
另外,有什么理由不能将服务器响应作为参数传递而不是尝试绑定它?
-
我发现
unirest使用的request模块将其他对象绑定到其例程中的回调
标签: javascript node.js binding