var express = require('express');
var router = express.Router();
var url = require('url')
var http = require('http')
var qs = require('querystring');
var config = require('../../config/config');
var request=require('request');
var fs = require("fs");
var multer = require("multer");
var upload = multer({dest:'./public/uploads'});
/**
* backstage/v8login 登录
*/
router.post('/backstage/v8login',function( req,res ){
httpA.loginPost( req , res );
})
/**
* 上传文件
*/
router.post('/uc/v1/file/upload', upload.single('file'),function( req,res ){
var file_type;
if (req.file.mimetype.split('/')[0] == 'image'){
file_type = '.' + req.file.mimetype.split('/')[1];
}
if (file_type) {
fs.rename(req.file.path, req.file.path + file_type, function (err, doc) {
if (err) {
console.error(err);
return;
}
httpA.postFile( req,res ,'./public/uploads/' + req.file.filename + file_type,req.file.filename + file_type );
})
return;
} else{
res.json({ code:"1",message:"上传失败" })
}
})
router.get('*',function( req,res ){
httpA.get( req , res );
})
router.post('*',function( req,res ){
httpA.post( req , res );
})
module.exports = router;
var httpA = {
loginPost( req , res ){
var content = qs.stringify( req.body ) ;
var options = {
hostname: config.adminHost,
port: config.adminPort,
path: req._parsedUrl.path,
method: 'POST',
headers: {
'Content-Type': req.headers['content-type'],
"Content-Length":content.length,
}
};
var httpObj = http.request(options, function ( response ) {
if( response.statusCode != 200 ){
res.json({ code: response.statusCode,message:response.statusMessage });
}
response.setEncoding('utf8');
response.on('data', function (chunk) {
let data = JSON.parse( chunk ); // 将token存储到服务端
if( data.code == 0){
localStorage.setItem( 'user'+data.data.sysUseId,data.data.token );
data.data.token = data.data.sysUseId;
}
res.json( data )
});
});
httpObj.on('error', function (e) { // 错误信息
res.json( { error: e } )
});
httpObj.write(content);
httpObj.end();
},
get( req , res ){
http.get( 'http://'+config.adminHost+':'+config.adminPort+'/'+req._parsedUrl.path ,function( response ){
var str="";
if( response.statusCode != 200 ){
res.json({ code: response.statusCode,message:response.statusMessage });
}
response.on("data",function(chunk){
res.json( JSON.parse( chunk ) )
})
response.on("end",function(){
console.log( str.toString() )
})
})
},
post( req , res , filepath ){
let data = req.body;
var options = {
headers: {
'Content-Type': req.headers['content-type'],
'Authorization': localStorage.getItem("user"+ req.headers.authorization ),
},
url: 'http://'+config.adminHost+':'+config.adminPort+req._parsedUrl.path,
method: 'POST',
json:true,
body: data
};
request(options, function( error, response, data ){
if (!error && response.statusCode == 200) {
res.json( data )
}else{
res.json( { code:1,message:"fail" } )
console.log(response.statusCode)
}
});
},
/**
*
* @param {*} req request 对象
* @param {*} res responese 对象
* @param {*} filepath 文件路径
* @param {*} filename 文件名称 name+扩展名
*/
postFile( req , res , filepath , filename ){
var options = {
hostname:config.adminHost,
port: config.adminPort,
path: req._parsedUrl.path,
method: 'POST'
}
// 模仿 浏览器传文件
var boundaryKey = '----' + req.headers['content-type'].split('----')[1]; //生成分隔数据
fs.readFile( filepath , function (err, data) { //读取需要上传的文件内容
if( err ){
res.json( { code:1, message : "node读取文件错误",error:err });
}else{
//拼装分隔数据段
var payload = '--' + boundaryKey + '\r\n' + 'Content-Disposition:form-data; name="file"; filename="'+filename+'"\r\n' + 'Content-Type:text/plain\r\n\r\n';
payload += data;
payload += '\r\n--' + boundaryKey + '--';
//发送请求
var reqA = http.request(options, function (response) {
response.setEncoding('utf8');
response.on('data', function (chunk) {
res.json( JSON.parse( chunk ) );
});
fs.unlink(filepath, function( err ){ // 上传文件之后 删除文件
// if(err){
// throw err;
// }
})
});
reqA.on('error', function(e) {
console.error("error:"+e);
});
//把boundary、要发送的数据大小以及数据本身写进请求
reqA.setHeader('Content-Type', req.headers['content-type']);
reqA.setHeader('Connection', 'keep-alive');
reqA.setHeader('Content-Length', Buffer.byteLength(payload, 'utf8'));
reqA.setHeader('Authorization', localStorage.getItem("user"+ req.headers.authorization ));
reqA.write(payload);
reqA.end();
}
});
}
}