【问题标题】:Keep to DRY in declaring HTTP and HTTPS REST server在声明 HTTP 和 HTTPS REST 服务器时保持 DRY
【发布时间】:2015-11-13 05:20:10
【问题描述】:

我正在使用 node.js Restify v4.0.3。 REST API 服务器支持 HTTP 和 HTTPS。目前声明服务器的代码违反了 DRY(不重复)原则。

HTTP 服务器的声明代码。

var server = restify.createServer({
    name: 'myapp',
    version: '1.0.0'
});
server.use(restify.acceptParser(server.acceptable));
server.use(restify.queryParser());
server.use(restify.bodyParser());

server.use(restify.CORS());
server.opts(/.*/, function (req,res,next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Methods", req.header("Access-Control-Request-Method"));
    res.header("Access-Control-Allow-Headers", req.header("Access-Control-Request-Headers"));
    res.send(200);
    return next();
});

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

HTTPS服务器的声明代码

var https_options = {
    name: 'myapp',
    version: '1.0.0',
    key: fs.readFileSync('./HTTPS.key'), //on current folder
    certificate: fs.readFileSync('./HTTPS.cert'),
};

var https_server = restify.createServer(https_options);

https_server.use(restify.acceptParser(server.acceptable));
https_server.use(restify.queryParser());
https_server.use(restify.bodyParser());

https_server.use(restify.CORS());
https_server.opts(/.*/, function (req,res,next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Methods", req.header("Access-Control-Request-Method"));
    res.header("Access-Control-Allow-Headers", req.header("Access-Control-Request-Headers"));
    res.send(200);
    return next();
});

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

有很多重复。如何改进代码以符合 DRY 原则?

【问题讨论】:

    标签: javascript node.js rest dry restify


    【解决方案1】:

    您可以将所有 .use 调用放在一个 setupDependencies 调用中,并将所有标头设置放在一个 setHeaders 调用中。

    var https_options = {
        name: 'myapp',
        version: '1.0.0',
        key: fs.readFileSync('./HTTPS.key'), //on current folder
        certificate: fs.readFileSync('./HTTPS.cert'),
    };
    
    var https_server = restify.createServer(https_options);
    
    https_server.use(restify.acceptParser(server.acceptable));
    https_server.use(restify.queryParser());
    https_server.use(restify.bodyParser());
    
    https_server.use(restify.CORS());
    https_server.opts(/.*/, function (req,res,next) {
        res.header("Access-Control-Allow-Origin", "*");
        res.header("Access-Control-Allow-Methods", req.header("Access-Control-Request-Method"));
        res.header("Access-Control-Allow-Headers", req.header("Access-Control-Request-Headers"));
        res.send(200);
        return next();
    });
    

    将简化为:

    var https_options = {
        name: 'myapp',
        version: '1.0.0',
        key: fs.readFileSync('./HTTPS.key'), //on current folder
        certificate: fs.readFileSync('./HTTPS.cert'),
    };
    
    var https_server = restify.createServer(https_options);
    
    setupDependencies(https_server);
    
    https_server.opts(/.*/, function (req,res,next) {
        setHeaders(req, res);
        res.send(200);
        return next();
    });
    
    
    /* helpers */
    
    function setupDependencies(server) {
        server.use(restify.acceptParser(server.acceptable));
        server.use(restify.queryParser());
        server.use(restify.bodyParser());
        server.use(restify.CORS());
    };
    
    function setHeaders(req, res) {
        res.header("Access-Control-Allow-Origin", "*");
        res.header("Access-Control-Allow-Methods", req.header("Access-Control-Request-Method"));
        res.header("Access-Control-Allow-Headers", req.header("Access-Control-Request-Headers"));
    };
    

    【讨论】:

      猜你喜欢
      • 2016-02-13
      • 1970-01-01
      • 1970-01-01
      • 2015-09-15
      • 2012-12-24
      • 2023-02-08
      • 1970-01-01
      • 2015-10-15
      • 1970-01-01
      相关资源
      最近更新 更多