Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TypeError: Key must be a buffer at new Hmac (crypto.js:91:16)

Tags:

node.js

Server.js

const express = require('express');
const bodyParser = require('body-parser');
const app = express();

// server port is 3000
let port = 3000;

// use bodyParser.json and urlencoded
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
  extended: true,
}));

// use api/v1, require routes/app.js
app.use('/api/v1', require('./routes/app.js')(express));

exports.server = app.listen(port, () => {
  console.log('Server active on port', port);
});

app.js

// require url shortener
const shurl = require('../modules/shurl');

module.exports = (express) => {
  const router = express.Router();

  router.get('/status', (req, res) => {
    res.json({
      healthy: true,
    })
  });

  router.post('/urls', (req, res) => {
      res.send(shurl(req, res));
  });

  return router;
}

shurl.js

const crypto = require('crypto');

module.exports = (url, res) => {
  // set the shortened url prefix
  let prefix = 'shurl.io/';
  // get the url data
  let hashUrl = url.body.url;
  // create the hash
  let hash = crypto.createHmac('sha256', hashUrl).digest('hex');
  // shorten the hash length to 7
  hashUrl = hash.substr(0,7);
  // create the shortened url
  let shortened = prefix + hashUrl;
  // send the shortened url
  res.json({shortUrl: shortUrl});
}

Error:

TypeError: Key must be a buffer
    at new Hmac (crypto.js:91:16)
    at Object.Hmac (crypto.js:89:12)
    at module.exports (C:\xampp\htdocs\url-shortener\src\modules\shurl.js:16:21)
    at router.post (C:\xampp\htdocs\url-shortener\src\routes\app.js:21:16)
    at Layer.handle [as handle_request] (C:\xampp\htdocs\url-shortener\node_modules\express\lib\router\layer.js:95:5)
    at next (C:\xampp\htdocs\url-shortener\node_modules\express\lib\router\route.js:131:13)
    at Route.dispatch (C:\xampp\htdocs\url-shortener\node_modules\express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (C:\xampp\htdocs\url-shortener\node_modules\express\lib\router\layer.js:95:5)
    at C:\xampp\htdocs\url-shortener\node_modules\express\lib\router\index.js:277:22
    at Function.process_params (C:\xampp\htdocs\url-shortener\node_modules\express\lib\router\index.js:330:12)

What exactly is causing this error and does anyone know the fix? I get this error when I try to POST to create a shortened url @ 127.0.0.1:3000/api/v1/urls

like image 730
Scary Avatar asked Mar 03 '17 01:03

Scary


1 Answers

The error is coming from your shurl.js

The line: let hashUrl = url.body.url; should be let hashUrl = url.body.url.toString();

Or line let hash = crypto.createHmac('sha256', hashUrl).digest('hex'); to be let hash = crypto.createHmac('sha256', hashUrl.toString()).digest('hex');

https://nodejs.org/api/crypto.html#crypto_class_hmac

like image 94
Williams Isaac Avatar answered Oct 18 '22 15:10

Williams Isaac