具有绝对 url 前缀的超级代理
Superagent with absolute url prefix
我注意到每次我想 运行 使用 superagent 进行节点测试时我都在写 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
TL;DR: superagent-absolute 正是这样做的。
详细:
您可以在 superagent 之上创建一个抽象层。
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);
};
},
})
);
或者您可以简单地使用 superagent-absolute。
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-prefix
is officially recommended 那样更新软件包,但截至 2020 年采用率最高。
It is such a simple package 我不会担心缺少更新。
用法示例:
import superagent from "superagent"
import prefix from "superagent-prefix"
const baseURL = "https://foo.bar/api/"
const client = superagent.use(prefix(baseURL))
我注意到每次我想 运行 使用 superagent 进行节点测试时我都在写 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
TL;DR: superagent-absolute 正是这样做的。
详细:
您可以在 superagent 之上创建一个抽象层。
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);
};
},
})
);
或者您可以简单地使用 superagent-absolute。
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-prefix
is officially recommended 那样更新软件包,但截至 2020 年采用率最高。
It is such a simple package 我不会担心缺少更新。
用法示例:
import superagent from "superagent"
import prefix from "superagent-prefix"
const baseURL = "https://foo.bar/api/"
const client = superagent.use(prefix(baseURL))