Skip to content

Commit 6d7d276

Browse files
committed
add close method, optimise mocha test scripts
1 parent ad83653 commit 6d7d276

File tree

5 files changed

+61
-26
lines changed

5 files changed

+61
-26
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
55
> Author : Alan Chen
66
7-
> version: 0.0.5
7+
> version: 0.0.6
88
99
> node >= 8.11.1
1010
@@ -38,6 +38,7 @@
3838
* `proxyError` 在代理服务器接收客户端请求或转发请求发生错误时触发,函数有2个参数
3939
* error `[Error]` 错误对象
4040
* from `[String]` server或client中其一种字符串。server表示错误发生在代理服务请求出错。client表示代理服务器接收客户端请求出错。
41+
4. ProxyHttp实例还自带一个`close`方法,使用方法和node的http模块类似。可选一个回调函数,当关闭服务器后触发。
4142

4243
### staticServer
4344
导出一个对象,自带1个方法`start`。返回一个promise,promise只会存在then,then返回一个布尔值,用来判断当前路径是否存在静态文件。true,会返回文件,false,表示当前路径不存在静态文件。参数如下:

example/emitEvents/server.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@ http.createServer((req, res) => {
3030
// 自启内置服务器做代理
3131
// const ins = HttpProxyPlugin.createProxyServer({
3232
// target: 'http://localhost:7070'
33-
// }).listen(3000, '192.168.0.43')
33+
// }).listen(3000, () => {
34+
// console.log('反向代理服务器启动成功,监听3000端口...')
35+
// })
3436

3537
// ins.on('proxyRequest', (proxyReq, opt) => {
3638
// // console.log(ins)
@@ -63,6 +65,6 @@ const generateHanlder = (port) => {
6365
}
6466
}
6567

66-
http.createServer(generateHanlder(PORT)).listen(PORT, () => {
67-
console.log(`目标服务器启动成功,监听${PORT}...`)
68-
})
68+
// http.createServer(generateHanlder(PORT)).listen(PORT, () => {
69+
// console.log(`目标服务器启动成功,监听${PORT}...`)
70+
// })

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@alanchenchen/httpproxyer",
3-
"version": "0.0.5",
3+
"version": "0.0.6",
44
"author": "Alan Chen",
55
"license": "MIT",
66
"description": "A simple http server proxy module implented with nodejs",

src/proxy.js

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,15 +177,30 @@ class ProxyHttp {
177177
return this
178178
}
179179

180-
listen(port=80, host='localhost', cb) {
181-
http.createServer(this.proxyServerListener).listen(port, host, () => {
180+
listen(port=80, ...rest) {
181+
let host = 'localhost'
182+
let cb
183+
if(rest.length == 1) {
184+
cb = rest[0]
185+
}
186+
else if(rest.length == 2) {
187+
host = rest[0]
188+
cb = rest[1]
189+
}
190+
this.proxyServer = http.createServer(this.proxyServerListener).listen(port, host, () => {
182191
// console.log(`proxy server http://${host}:${port} to ${this.targetServer} is running...`)
183192
cb && cb()
184193
})
185194

186195
return this
187196
}
188197

198+
close(cb) {
199+
this.proxyServer.close(() => {
200+
cb && cb()
201+
})
202+
}
203+
189204
on(event, handler) {
190205
switch (event) {
191206
case 'proxyRequest':

test/proxy.test.js

Lines changed: 35 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,32 @@ const assert = require('assert')
22
const http = require('http')
33
const proxyPlugin = require('../src/proxy')
44

5-
// target server 7070
6-
http.createServer((req, res) => {
7-
const reqHeaders = req.headers
8-
// return the headers from request info
9-
Object.entries(reqHeaders).forEach(item => {
10-
res.setHeader(item[0], item[1])
11-
})
12-
res.writeHead(200, {
13-
'Content-Type': 'text/plain;charset=utf8'
14-
})
15-
res.end(JSON.stringify({
16-
port: 7070,
17-
msg: 'success'
18-
}))
19-
}).listen(7070)
205

216
describe('httpProxyer', function() {
7+
// target server 7070
8+
const targetServer = http.createServer((req, res) => {
9+
const reqHeaders = req.headers
10+
// return the headers from request info
11+
Object.entries(reqHeaders).forEach(item => {
12+
res.setHeader(item[0], item[1])
13+
})
14+
res.writeHead(200, {
15+
'Content-Type': 'text/plain;charset=utf8'
16+
})
17+
res.end(JSON.stringify({
18+
port: 7070,
19+
msg: 'success'
20+
}))
21+
}).listen(7070)
22+
2223
describe('init one inner proxy server, use createProxyServer()', function() {
24+
let server
25+
afterEach(function() {
26+
server.close()
27+
})
2328
it('should proxy server 7070 to server 3000', function(done) {
2429
// proxy server 3000
25-
proxyPlugin.createProxyServer({
30+
server = proxyPlugin.createProxyServer({
2631
target: 'http://localhost:7070'
2732
}).listen(3000)
2833

@@ -43,9 +48,13 @@ describe('httpProxyer', function() {
4348
})
4449

4550
describe('proxy an existing server, use proxy()', function() {
51+
let server
52+
afterEach(function() {
53+
server.close()
54+
})
4655
it('should proxy server 7070 to server 3001', function(done) {
4756
// proxy server 3001
48-
http.createServer((req, res) => {
57+
server = http.createServer((req, res) => {
4958
proxyPlugin.proxy(req, res, {
5059
target: 'http://localhost:7070'
5160
})
@@ -68,9 +77,13 @@ describe('httpProxyer', function() {
6877
})
6978

7079
describe('use the event hooks by on()', function() {
80+
let server
81+
afterEach(function() {
82+
server.close()
83+
})
7184
it('should intercept the req or res data', function(done) {
7285
// proxy server 3002
73-
http.createServer((req, res) => {
86+
server = http.createServer((req, res) => {
7487
const ins = proxyPlugin.proxy(req, res, {
7588
target: 'http://localhost:7070'
7689
})
@@ -98,4 +111,8 @@ describe('httpProxyer', function() {
98111
})
99112
})
100113
})
114+
after('if all tests succeed, close the http process', function() {
115+
targetServer.close()
116+
})
117+
101118
})

0 commit comments

Comments
 (0)