TypeError:Key必须是新Hmac的缓冲区(crypto.js:91:16)

时间:2017-03-03 01:35:51

标签: 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});
}

错误:

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)

究竟是什么导致了这个错误,是否有人知道修复?当我尝试POST以创建缩短的URL @ 127.0.0.1:3000/api/v1/urls

时出现此错误

1 个答案:

答案 0 :(得分:7)

错误来自您的shurl.js

该行: let hashUrl = url.body.url; 应为let hashUrl = url.body.url.toString();

或将let hash = crypto.createHmac('sha256', hashUrl).digest('hex');排成let hash = crypto.createHmac('sha256', hashUrl.toString()).digest('hex');

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