node一点代码

代码片段一:

demo.js

var http = require("http"),
    url  = require("url"),
    path = require("path"),
    fs   = require("fs"),
    utoken = require("./utoken");//require this module

var handle = {}
handle["/utoken"]         = utokenHandler;

/**
 * server
 */
http.createServer(function (req, res) {
    var pathname=url.parse(req.url).pathname;
    if(typeof handle[pathname] === "function"){
    	handle[pathname](res, req)
    }
    else {
        pathname=__dirname+url.parse(req.url).pathname;
        if (path.extname(pathname)=="") {
            pathname+="/";
        }
        if (pathname.charAt(pathname.length-1)=="/"){
            pathname+="index.html";
        }
        fs.exists(pathname,function(exists){
            if(exists){
                fs.readFile(pathname,function (err,data){
                    res.end(data);
                })
            } else {
                res.writeHead(404, '404 Not Found', {'Content-Type': 'text/html'})
                res.end('<h1>404 Not Found</h1>')
            }
        })
    }
}).listen(8080, "0.0.0.0");

console.log("Server running at http://0.0.0.0:8080/");

/**
 * define a handler
 */
function utokenHandler(res, req){//get token from server
	//1, get client ip
	var ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress
	//2, get upload host and token for the client
	utoken.getHostTokenTs(ip, function(ret){
		//3, show result
		res.writeHead(200)
		res.write(ret)
		res.end()
	})
}

utoken.js

var http   = require("http"),
    qs     = require('qs'),
    crypto = require("crypto");

/**
 * Configure
 */
var Appid     = "xxxxx"
var Appsecret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
var Appname   = "xxxxx"

/**
 * Module
 */
exports.getHostTokenTs = function(clientIp, callback_func){

	var host, tsecret, ts

	this.uri = {
		host: "api.dbank.com",
		port: 80,
		path: "/rest.php",
		method: "POST",
		headers: {
			'Content-Type': 'application/x-www-form-urlencoded',
		}
	}

	var dt = {   
		client_ip : clientIp,
		nsp_app   : Appid,   
		nsp_fmt   : "JSON", 
		nsp_svc   : "nsp.ping.getupsrvip",
		nsp_ts    : Date.parse(new Date()),
		nsp_ver   : "1.0"
	}

	this.processRequest = function(res) {
		//console.log('STATUS: ' + res.statusCode);
		//console.log('HEADERS: ' + JSON.stringify(res.headers));
		var body = ''
		res.on("data",function(chunk){
			body += chunk
		});
		res.on("end",function(){
			try{
				var ret = JSON.parse(body)
			}catch(e){
				body = e.message	
			}
			if(ret && ret.ip){
				var ts = Date.parse(new Date())
				var tmpsecret = crypto.createHmac('sha1', Appsecret).update(ts+"").digest('hex')
				callback_func(ret.ip + " " + tmpsecret + " " + ts)
			}
			callback_func(body)
		});
		res.on("error",function(e){
			console.log("err"+e.message)
		});
				
	}

	this.result = function(){
		var md5str = Appsecret
		for (var key in dt) {md5str+=key+dt[key]}
		var hash = crypto.createHash("md5")
		dt.nsp_key = hash.update(md5str+"").digest('hex').toUpperCase()

		var postdata = qs.stringify(dt)
		this.uri.headers["Content-Length"] = Buffer.byteLength(postdata)
		var req = http.request(this.uri, this.processRequest)
		req.write(postdata)
		req.end()
	}

	this.result();
}

 详见:https://github.com/ciaos/node-demo

 

代码片段二:

var http = require("http"),
    url  = require("url"),
    path = require("path");

var express = require('express')

/* NP */
var np = express()
np.get(/^(\/file)\/(.*)/, function(req, res){
    var options = {
        host: '127.0.0.1',
        port: 8081,
        path: req.url,
        method: 'GET'
    };

    var mproxy = function(mres){
        var body = ''
        mres.on('data', function(chunk) {
            body += chunk
        });
        mres.on('end',function() {
            if(mres.statusCode == 302){
                var url = mres.headers.location.substring(7)  //trim http://
                var server = url.substring(0,url.indexOf('/'))
                var serverinfo = server.split(":")
                var host = serverinfo[0]
                var port = 80
                if(serverinfo.length > 1){
                    port = serverinfo[1]
                }
                var path = url.substring(server.length).replace(/[\r\n]/g, "")
                options = {
                    host: host,
                    port: port,
                    path: path
                };
                var dreq = http.request(options, dproxy)
                dreq.on('error', function(e) {
                    res.send(502)
                })
                dreq.end()
            } else {
               res.send(dres.statusCode);
            }
        });
        mres.on('error',function() {
            res.send(mres.statusCode);
        });
    }

    var dproxy = function(dres){
        if(dres.statusCode == 206 || dres.statusCode == 200){
            dres.on('data', function(chunk) {
                res.write(chunk)
            });
            dres.on('end',function() {
                res.end()
            });
            dres.on('error',function() {
                res.send(dres.statusCode)
            });
    
        } else {
            res.send(dres.statusCode)
        }
    }

    var mreq = http.request(options, mproxy)
    mreq.on('error', function(e) {
        res.send(502)
    })
    mreq.end()
})
np.listen(8080);
console.log('NP Listening on port 8080');

/* MN */
var mn = express()
mn.get(/^(\/file)\/(.*)/, function(req, res){
    res.set("location", "http://127.0.0.1:8082/test.dat")
    res.send(302)
})
mn.listen(8081)
console.log('MN Listening on port 8081');

/* DN */
var dn = express()
dn.use(express.static(__dirname + '/'));
dn.listen(8082)
console.log('DN Listening on port 8082');

 代码三

var http = require("http"),
	url  = require("url"),
	fs   = require("fs"),
	path = require("path")

var express = require('express')

var logFile = fs.createWriteStream('./access.log', {
	"flags": "a"
})

/* NP */
var np = express()

np.configure(function(){
	np.use(express.logger({stream: logFile}))
})

np.get(/^\/(file|dl|pl|TDS)\/(.*)/, function(req, res){
	var filesize = 0
	var reqsize = 0
	var start = 0
	var end = 0
	var header_sent = 0
	var finish = 0

	req.on("close",function(){
		finish = 1
		res.end()
	})

	if(req.headers["range"] != null){
		var reqrange = req.headers["range"].replace("bytes=","")
		var rangeinfo = reqrange.split("-")
		start = rangeinfo[0]
		end = rangeinfo[1]
		res.status(206)
	}

	var endrequest = function(statuscode) {
		if(header_sent == 0) {
			res.send(statuscode)
		}
		else {
			res.end()
		}
	}
	var moptions = {
		host: '10.6.2.26',
		port: 80,
		path: req.url,
		method: 'GET',
		headers: {}
	}

	if(req.headers['nsp-auth'] != null){
		moptions.headers["nsp-auth"] = req.headers['nsp-auth']
	}
	if(req.headers.range != null){
		moptions.headers.range = req.headers.range
	}
	if(req.headers["user-agent"] != null){
		moptions.headers["user-agent"] = req.headers["user-agent"]
	}
	if(req.headers["host"] != null){
		moptions.headers["host"] = req.headers["host"]
	}
	if(req.headers["x-is-https"] != null){
		moptions.headers["x-is-https"] = req.headers["x-is-https"]
	}
	if(req.headers["x-forwarded-for"] != null){
		moptions.headers["x-forwarded-for"] = req.headers["x-forwarded-for"]
	}

	var mproxy = function(mres){
		var body_locs = []
		var loc_id = 0
		var body = ''

		var dproxy = function(dres){
			if(dres.statusCode == 206 || dres.statusCode == 200){
				header_sent = 1
				dres.on('data', function(chunk) {
					res.write(chunk)
					start = parseInt(start) + chunk.length
				})
				dres.on('end',function() {
					if(start + 1 >= reqsize){
						finish = 1
						res.end()
					} else {
						moptions.headers["range"] = "bytes="+start+"-"
						if(finish == 0){
							var mreq = http.request(moptions, mproxy)
							mreq.on('error', function(e) {
								endrequest(502)
							})
							mreq.end()
						} else{
							res.end()
						}
					}
				})
				dres.on('error',function() {
					if(finish == 0 && loc_id < body_locs.length - 1)
					{
						loc_id += 1
						mdone()
					} else {
						endrequest(dres.statusCode)
					}
				})
			} else {
				if(finish == 0 && loc_id < body_locs.length - 1)
				{
					loc_id += 1
					mdone()
				} else {
					endrequest(dres.statusCode)
				}
			}
		}

		var mdone = function(){
			if(mres.statusCode == 302){
				var url = ""
				var range = ""
				if(mres.headers.location != null){
					url = mres.headers.location.substring(7)  //trim http://
					if(mres.headers.x-np-range != null){
						range = mres.headers["x-np-range"].split(":")[1]
					}
				} else {
					body_locs = body.split("\n")
					url = body_locs[loc_id].substring(body.indexOf("http://")).substring(7)
					range = body_locs[loc_id].split(":")[1]
				}
				var server = url.substring(0,url.indexOf('/'))
				var serverinfo = server.split(":")
				var host = serverinfo[0]
				var port = 80
				if(serverinfo.length > 1){
					port = serverinfo[1]
				}
				var path = url.substring(server.length).replace(/[\r\n]/g, "")
				var doptions = {
					host: host,
					port: port,
					path: path,
					headers: { "Range": "bytes="+range , "Connection": "close" }
				}
				if(mres.headers["x-np-file-size"] == null) {
					doptions.headers["NSP-NP"] = "req_file"
				} else if(header_sent == 0) {
					filesize = reqsize = mres.headers["x-np-file-size"]
					if(start == "" && end != ""){
						start = reqsize - end
					}
					if(end == ""){
						end = reqsize - 1
					}
					reqsize = end - start + 1
					if(req.headers["range"] != null){
						res.setHeader("Content-Range", "bytes "+start+"-"+end+"/"+filesize)
					}
				}
				if(header_sent == 0){
					if(mres.headers["content-disposition"] != null) {
						res.setHeader("Content-Disposition", mres.headers["content-disposition"])
					}
					if(mres.headers["net-report-url"] != null) {
						res.setHeader("net-report-url", mres.headers["net-report-url"])
					}
					if(mres.headers["nsp-auth"] != null) {
						res.setHeader("NSP-Auth", mres.headers["nsp-auth"])
					}
					if(mres.headers["content-md5"] != null) {
						res.setHeader("Content-MD5", mres.headers["content-md5"])
					}
					if(mres.headers["connection"] != null) {
					//	res.setHeader("Connection", mres.headers["connection"])
						res.setHeader("Connection", "keep-alive")
					}
					if(mres.headers["content-type"] != null) {
						res.setHeader("Content-Type", mres.headers["content-type"])
					}
					if(mres.headers["etag"] != null) {
						res.setHeader("Etag", mres.headers["etag"])
					}
					if(mres.headers["last-modified"] != null) {
						res.setHeader("Last-Modified", mres.headers["last-modified"])
					}
					if(mres.headers["expires"] != null) {
				//		res.setHeader("Expires", mres.headers["expires"])
					}
					if(mres.headers["x-np-file-size"] != null) {
						res.setHeader("Content-Length", reqsize)
					}
					res.setHeader("Accept-Ranges","bytes")
				}
				if(finish == 0){
					var dreq = http.request(doptions, dproxy)
					dreq.on('error', function(e) {
						endrequest(502)
					})
					dreq.end()
				} else {
					res.end()
				}
			} else {
				if(mres.statusCode == 401 && header_sent == 0) {
					if(mres.headers["nsp-auth"] != null) {
						res.setHeader("nsp-auth", mres.headers["nsp-auth"])
					}
				}
				endrequest(mres.statusCode)
			}
		}

		mres.on('data', function(chunk) {
			body += chunk
		})
		mres.on('end', mdone)
		mres.on('error',function() {
			endrequest(mres.statusCode)
		})
	}

	var mreq = http.request(moptions, mproxy)
	mreq.on('error', function(e) {
		endrequest(502)
	})
	mreq.end()
})

np.use(express.static('/usr/local/nspnp/html/'))
np.listen(80)
console.log('NP Listening on port 80')

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值