How can I check the hash of a bitcoin block? Let's pick an example bitcoin block: #499583

This is the block: https://insight.bitpay.com/api/rawblock/000000000000000000677c4077da7c9f01dde5f332ba2fbff962ee699714d5da

It starts with 00000020164a1e4a7f34b96b0e201d....

I'm trying to hash it so that the hash is 000000000000000000677c4077da7c9f01dde5f332ba2fbff962ee699714d5da again. This is my Javascript-Code:

var Bitcoin = require('bitcoinjs-lib');
var request = require('request');
var crypto = require('crypto');

function getRawBlock(blockHash) {
  return new Promise((resolve, reject) =&gt; {
    request('https://insight.bitpay.com/api/rawblock/' + blockHash, // hitting an insight API to get the full block
      (error, response, body) =&gt; {
        try {
          var block = JSON.parse(body); // result is in JSON
          resolve(block.rawblock)
        } catch (error) {
          reject(error)
        }
      })
  })
}

getRawBlock('000000000000000000677c4077da7c9f01dde5f332ba2fbff962ee699714d5da')
  .then((rawBlock) =&gt; {
    var hash = crypto.createHash('sha256').update(rawBlock).digest('hex');
     console.log(hash);
  })
})


But the result is 484cd10be70dbc7615dd9a71b1f91375b100715d9b2a0ecc6a05b9d247a8cda9.
What am I doing wrong? The result should be 000000000000000000677c4077da7c9f01dde5f332ba2fbff962ee699714d5da. Do I hash something in the wrong format?
Seems to me that you are hashing the whole block instead of header only. Take my code (in C++). 

void test ( )
{
  const MyByteArray header ( QByteArray::fromHex (
     "00000020" // version
     "164a1e4a7f34b96b0e201dcc6a623c63fe3874696e4875000000000000000000" // prev hash
     "49de8b4f4bfa9fc890d3d28a93156a111f891dc680090cd497b58a7d5c2b09cf" // merkle
     "2f62345a"      // timestamp
     "edb00018"      // bits
     "ffdfd257" ) ); // nonce
  const MyKey32 key ( header.sha256d ( ) );
  qDebug ( ) &lt;&lt; key.toString ( );
}


and the output is:

000000000000000000677c4077da7c9f01dde5f332ba2fbff962ee699714d5da