【问题标题】:Bind ServerResponse object to function将 ServerResponse 对象绑定到函数
【发布时间】: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


【解决方案1】:

我发现unirest 使用的request 模块将其他对象绑定到其例程中的回调

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-28
    • 1970-01-01
    • 2017-08-30
    相关资源
    最近更新 更多