-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.js
47 lines (43 loc) · 1.63 KB
/
server.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
var express = require('express');
var app = express();
var server = require('http').createServer(app);
var methodOverride = require('method-override');
var request = require('request');
var logger = require('morgan');
var proxyConfig = require('./config/proxyConfig');
var routesConfig = require('./routes/index');
app.use(logger('dev'));
app.use(require('./middlewares/basicAuth'));
app.use(methodOverride());
// 请求示例:http://127.0.0.1/part4/upload
app.use('/', function(req, res) {
var pathArr = req.path.split('/');
// 针对不在配置文件中的路由进行错误处理
if (!proxyConfig[pathArr[1]]) {
res.status(404).send('Not found:' + req.originalUrl);
return;
}
// 设置转发url
var targetUrl = 'http://' + proxyConfig[pathArr[1]].host + ':' + proxyConfig[pathArr[1]].port + req.originalUrl.replace(/\/part\d/, '');
// 重置请求方式,配置表里没有的路由,使用初始method
if (routesConfig[req.path]) {
// 如果路由没有配置method,使用初始method
req.method = routesConfig[req.path].method || req.method;
}
// 不能使用bodyParser,会把req里数据流进行更改,对pipe方法造成影响
req.pipe(request(targetUrl)).on('error', function(err) {
// 处理目标服务器错误
res.status(404).send('Not found:' + req.originalUrl);
return;
}).on('response', function(response) {
// redis缓存处理
var bodyChunks = [];
response.on('data', function(chunk) {
bodyChunks.push(chunk);
}).on('end', function() {
var body = Buffer.concat(bodyChunks);
//*****do somethings
});
}).pipe(res);
});
server.listen(3100);