如何设置一系列setHeader的DRY
How to Set a Series of setHeader's DRY
我只是在学习使用 DRY
原则,我不知道如何设置一系列 setHeader
的 DRY
(如果可能的话?? ).
感谢任何帮助。
function plugin(options) {
var defaults = {
cache: 0
, port: 8080
, host: 'localhost'
, verbose: false
, serverInfo: 'myserver'
, cacheControl: 'no-store'
, xPowerBy: 'Locomotion'
, xFrameOptions: 'DENY'
, xXSSProtection: '1; mode=block'
, xContentTypeOption: 'nosniff'
, contentSecurityPolicy: 'default-src "self"'
};
var opts = options || {};
setDefaults(opts, defaults);
return function(files, staticsmith, done) {
if (server) {
done();
return;
}
// Some stuff
server = require('http').createServer(function (request, response) {
response.setHeader('X-Powered-By', opts.xPowerBy);
response.setHeader('x-frame-options', opts.xFrameOptions);
response.setHeader('X-XSS-Protection', opts.xXSSProtection);
response.setHeader('X-Content-Type-Options', opts.xContentTypeOption);
response.setHeader('Cache-Control', opts.cacheControl);
response.setHeader('Content-Security-Policy', opts.contentSecurityPolicy);
// Does some more stuff
};
}
这不是 major/offensive 对 DRY 原则的违反,因为您每次都为不同的 options/values 设置了 header。
检查 documentation,似乎没有接受具有多个 header 属性的 objects 或 objects 数组的重载。
但是,如果您想在视觉上改进代码(并完全消除重复),您可以采用 'data-driven' 方法并使用数组
var headers = [{
name: 'X-Powered-By',
option: opts.xPowerBy
}, {
name: 'x-frame-options',
option: opts.xFrameOptions
}, {
name: 'X-XSS-Protection',
option: opts.xXSSProtection
}, {
name: 'X-Content-Type-Options',
option: opts.xContentTypeOption
}, {
name: 'Cache-Control',
option: opts.cacheControl
}, {
name: 'Content-Security-Policy',
option: opts.contentSecurityPolicy
}];
然后循环
for(var i = 0; i < headers.length; i++){
response.setHeader(headers[i].name, headers[i].option);
}
我只是在学习使用 DRY
原则,我不知道如何设置一系列 setHeader
的 DRY
(如果可能的话?? ).
感谢任何帮助。
function plugin(options) {
var defaults = {
cache: 0
, port: 8080
, host: 'localhost'
, verbose: false
, serverInfo: 'myserver'
, cacheControl: 'no-store'
, xPowerBy: 'Locomotion'
, xFrameOptions: 'DENY'
, xXSSProtection: '1; mode=block'
, xContentTypeOption: 'nosniff'
, contentSecurityPolicy: 'default-src "self"'
};
var opts = options || {};
setDefaults(opts, defaults);
return function(files, staticsmith, done) {
if (server) {
done();
return;
}
// Some stuff
server = require('http').createServer(function (request, response) {
response.setHeader('X-Powered-By', opts.xPowerBy);
response.setHeader('x-frame-options', opts.xFrameOptions);
response.setHeader('X-XSS-Protection', opts.xXSSProtection);
response.setHeader('X-Content-Type-Options', opts.xContentTypeOption);
response.setHeader('Cache-Control', opts.cacheControl);
response.setHeader('Content-Security-Policy', opts.contentSecurityPolicy);
// Does some more stuff
};
}
这不是 major/offensive 对 DRY 原则的违反,因为您每次都为不同的 options/values 设置了 header。
检查 documentation,似乎没有接受具有多个 header 属性的 objects 或 objects 数组的重载。
但是,如果您想在视觉上改进代码(并完全消除重复),您可以采用 'data-driven' 方法并使用数组
var headers = [{
name: 'X-Powered-By',
option: opts.xPowerBy
}, {
name: 'x-frame-options',
option: opts.xFrameOptions
}, {
name: 'X-XSS-Protection',
option: opts.xXSSProtection
}, {
name: 'X-Content-Type-Options',
option: opts.xContentTypeOption
}, {
name: 'Cache-Control',
option: opts.cacheControl
}, {
name: 'Content-Security-Policy',
option: opts.contentSecurityPolicy
}];
然后循环
for(var i = 0; i < headers.length; i++){
response.setHeader(headers[i].name, headers[i].option);
}