添加中间件以检查API密钥并传递

cud*_*mer 2 node.js express restify

在决定使用node编写我的下一个API并解析之后,我才开始学习node.js.只有几个用户访问API,它将是一个严格的私人用户 - 没有其他人能够访问它.

基本上,我需要检查每个请求是否提供(和有效)"密钥"和"通过"参数.所以,我想我可以添加一些在其他一切之前执行的中间件来进行检查..例如:

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();
});
Run Code Online (Sandbox Code Playgroud)

浏览localhost:8888/test给出{"code":"NotAuthorized","message":"No API key supplied"}了我想要的东西.

但是,浏览http://localhost:8888/test?key=a仍然会给出相同的消息..

显然,我不会以正确的方式解决这个问题.有人能指出我正确的方向吗?

提前致谢.

cud*_*mer 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();
});
Run Code Online (Sandbox Code Playgroud)