2017-03-03 144 views
3

Server.js类型错误:密钥必须在新HMAC缓冲器(crypto.js:91:16)

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) 

到底是什么造成这个错误,没有人知道的修复?我得到这个错误,当我尝试发布创建一个缩短的URL @ 127.0.0.1:3000/api/v1/urls

+0

好奇,想知道是否 问题已经解决了。 我处于类似的情况 – visrey

回答

5

错误是从你的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

相关问题