2014-01-30 22 views
2

我剛開始學習node.js,之後決定使用node和restify編寫我的下一個API。只有幾個用戶訪問該API,並且它將是一個嚴格私密的用戶 - 其他人都不應該能夠訪問它。添加中間件來檢查API密鑰並通過

基本上,我需要檢查爲每個請求提供(和有效)「key」和「pass」參數。所以,我想我可以補充一點,是其他一切做檢查之前執行一些中間件..例如: -

var restify = require('restify'); 

var server = restify.createServer({ 
    name: 'test' 
}); 

server.use(function(req, res, next) { 
    if (req.params.key == null) { 
     console.log("No API key supplied"); 
     return next(new restify.NotAuthorizedError("No API key supplied")); 
    } 
}); 
server.use(restify.bodyParser()); 


server.listen(8888, function() { 
    console.log('%s listening at %s', server.name, server.url); 
}); 

server.get('/test', function(req, res, next) { 
    res.send('Hello World'); 
    return next(); 
}); 

瀏覽到localhost:8888/test{"code":"NotAuthorized","message":"No API key supplied"}這就是我想要的。

然而,瀏覽到http://localhost:8888/test?key=a仍然給出了同樣的短信..

很顯然,我不是要對這個正確的方式。有人能指引我朝着正確的方向嗎?

在此先感謝。

回答

5

我需要添加restify.queryParser()來解析GET參數。現在,這個作品:

var restify = require('restify'); 

var server = restify.createServer({ 
    name: 'test' 
}); 

server.use(restify.queryParser()); 
server.use(restify.bodyParser()); 
server.use(function(req, res, next) { 
    if (req.query.key == null) { 
     console.log("No API key supplied"); 
     return next(new restify.NotAuthorizedError("No API key supplied")); 
    } else return next(); 
}); 

server.listen(8888, function() { 
    console.log('%s listening at %s', server.name, server.url); 
}); 

server.get('/test', function(req, res, next) { 
    res.send('Hello World'); 
    return next(); 
});