2016-01-11 5 views
0

Я использую superagent на клиенте узла стрелять POST или PATCH запросов, как это (это некрасиво!):Как высушить следующий код?

Между двумя кодовыми блоками в if-else единственным отличием является http verb и API конечных точек, которые в случае запроса patch также содержит /:id, прилагаемый к URL-адресу.

if (typeof resourceId === 'undefined'){ 
    request 
    .post('http://localhost:8080/api/resources/') 
    .send(JSON.stringify(resource_json)) 
    .set('Accept', 'application/json') 
    .set('Content-Type', 'application/json') 
    .set('Authorization', 'Token token=3S4pREbMkMoEGG6zHeUJ7Qtt') 
    .end(function(err, res) { 
     if (!err && res.ok) { 
     console.log(chalk.bold.cyan('Resource created successfully')); 
     packageJson.resource_id = res.body.id; 
     fs.writeFileSync('package.json', JSON.stringify(packageJson)); 
     process.exit(0); 
     } 

     var errorMessage; 

     if (res && res.status === 401) { 
     errorMessage = "Authentication failed! Bad username/password?"; 
     } else if (err) { 
     errorMessage = err; 
     } else { 
     errorMessage = res.text; 
     } 
     console.error(chalk.red(errorMessage)); 
     process.exit(1); 
    }); 
    } else { 
    request 
    .patch('http://localhost:8080/api/reources/' + resourceId) 
    .send(JSON.stringify(resource_json)) 
    .set('Accept', 'application/json') 
    .set('Content-Type', 'application/json') 
    .set('Authorization', 'Token token=3S4pREbMkMoEGG6zHeUJ7Qtt') 
    .end(function(err, res) { 
     if (!err && res.ok) { 
     console.log(chalk.bold.cyan('Resource created successfully')); 
     packageJson.book_id = res.body.id; 
     fs.writeFileSync('package.json', JSON.stringify(packageJson)); 
     process.exit(0); 
     } 

     var errorMessage; 

     if (res && res.status === 401) { 
     errorMessage = "Authentication failed! Bad username/password?"; 
     } else if (err) { 
     errorMessage = err; 
     } else { 
     errorMessage = res.text; 
     } 
     console.error(chalk.red(errorMessage)); 
     process.exit(1); 
    }); 

    } 

Как я могу сушить это?

ответ

2

Доступ к методам можно получить через переменную.

const baseUrl = 'http://localhost:8080/api/resources/'; 
const isNew = undefined === resourceId; 
const method = isNew ? 'post' : 'patch'; 
const url = isNew ? baseUrl : basseUrl + resourceId; 

request[method](url).send().end(); 

Или более читаемый.

const baseUrl = 'http://localhost:8080/api/resources/'; 
const isNew = undefined === resourceId; 
let method, url; 

if(isNew) { 
    method = 'post' 
    url = baseUrl; 
} else { 
    method = 'patch' 
    url = baseUrl + resourceId; 
} 

request[method](url).send().end(); 
Смежные вопросы