Суперагент с абсолютным префиксом URL
Я заметил что пишу http://localhost
каждый раз, когда я хочу запустить тест узла с суперагентом.
import superagent from 'superagent';
const request = superagent.agent();
request
.get('http://localhost/whatever')
.end((err, res) => { ... });
Есть ли способ избежать localhost
часть?
Насколько я могу судить, чтобы избежать жестко закодированного запроса к хосту:
const baseUrl = 'http://localhost:3030';
request
.get(`${baseUrl}/whatever`)
Но я все еще должен нести baseUrl
с агентом каждый раз.
1 ответ
TL;DR: https://github.com/zurfyx/superagent-absolute делает именно это.
Подробно:
Вы можете создать один слой абстракции поверх суперагента.
function superagentAbsolute(agent) {
return baseUrl => ({
get: url => url.startsWith('/') ? agent.get(baseUrl + url) : agent.get(url),
});
}
⬑ Это переопределит agent.get
когда вызывается со стартовым /
global.request = superagentAbsolute(agent)('http://localhost:3030');
Теперь вам нужно сделать то же самое для: DELETE, HEAD, PATCH, POST и PUT.
https://github.com/zurfyx/superagent-absolute/blob/master/index.js
const OVERRIDE = 'delete,get,head,patch,post,put'.split(',');
const superagentAbsolute = agent => baseUrl => (
new Proxy(agent, {
get(target, propertyName) {
return (...params) => {
if (OVERRIDE.indexOf(propertyName) !== -1
&& params.length > 0
&& typeof params[0] === 'string'
&& params[0].startsWith('/')) {
const absoluteUrl = baseUrl + params[0];
return target[propertyName](absoluteUrl, ...params.slice(1));
}
return target[propertyName](...params);
};
},
})
);
Или вы можете просто использовать суперагент-абсолют.
const superagent = require('superagent');
const superagentAbsolute = require('superagent-absolute');
const agent = superagent.agent();
const request = superagentAbsolute(agent)('http://localhost:3030');
it('should should display "It works!"', (done) => {
request
.get('/') // Requests "http://localhost:3030/".
.end((err, res) => {
expect(res.status).to.equal(200);
expect(res.body).to.eql({ msg: 'It works!' });
done();
});
});
Хотя не так давно обновил пакет как superagent-absolute
, superagent-prefix
официально рекомендуется и имеет наибольшее распространение с 2020 года.
Это настолько простой пакет, что я бы не стал беспокоиться об отсутствии обновлений.
Пример использования:
import superagent from "superagent"
import prefix from "superagent-prefix"
const baseURL = "https://foo.bar/api/"
const client = superagent.use(prefix(baseURL))