node服务器接口不稳定,Node做中转服务器转发接口

由于项目在做前后端分离,牵扯跨域和夸协议问题,临时抱佛脚,选择用nodejs做中转,我想应该好多人都用它。但是做普通的表单转发没啥问题,当处理附件上传转发时,各种蛋疼,已解决!

1.项目比较特殊,后台拥有两个平台,一个java一个donet,比较鸡肋,具体什么原因就不解释了。

2.当做node转发时,刚开始没有转发文件的操作,就做的很简单,用户传过来啥就,拦截到,进行转发,一切都很ok!

3.文件转发,就很麻烦。我的思路,将用户上传的文件存到node服务器。使用formidable 。

通过npm安装:

使用它进行文件转存,保存到临时目录得到文件信息。

再通过文件包重组。进行上传。注意此处上传必须遵循w3c上传文件表单标准,具体自己查资料。

其实思路很简单,但是实际操作起来还是挺麻烦,我中间也趟了好多坑,也是自己node不成熟,毕竟只是用来做中转!

直接上代码吧:看代码还是清晰:

server.js,用于启动服务并转发。

>>>>" + prams);

const postData = prams;

console.log("client pramsJson>>>>>" + postData);

var contenttype = request.headers['content-type'];

if (contenttype == undefined || contenttype == null || contenttype == '') {

var opt = {

host: javaServerhost,//跨域访问的主机ip

port: javaServerport,path: "/hrrp" + clientUrl2,headers: {

'Content-Length': Buffer.byteLength(postData)

}

}

} else {

var opt = {

host: javaServerhost,headers: {

'Content-Type': request.headers['content-type'],'Content-Length': Buffer.byteLength(postData)

}

}

}

var body = '';

console.log('method',opt.method);

var req = http.request(opt,function (res) {

//console.log("response: " + res.statusCode);

res.on('data',function (data) {

body += data;

}).on('end',function () {

response.write(body);

response.end();

//console.log("end:>>>>>>>" + body);

});

}).on('error',function (e) {

response.end('内部错误,请联系管理员!MSG:' + e);

console.log("error: " + e.message);

})

req.write(postData);

req.end();

})

} else if (pathname.match(fileServerUrlFlag) != null) {

//文件拦截保存到本地

var form = new formidable.IncomingForm(),files = [],fields = [];

form.uploadDir = os.tmpdir();

form.on('field',function (field,value) {

console.log(field,value);

fields.push([field,value]);

}).on('file',file) {

console.log(field,file);

files.push([field,file]);

}).on('end',function () {

//

var clientUrl2 = clientUrl.replace("/" + fileServerUrlFlag,'');

var opt = {

host: netServerhost,method: request.method

}

var body = '';

var req = http.request(opt,function (res) {

res.on('data',function () {

response.write(body);

response.end();

});

}).on('error',function (e) {

response.end('内部错误,请联系管理员!MSG:' + e);

console.log("error: " + e.message);

})

//文件上传

uploadFile(files,fields);

});

form.parse(sreq);

}

else {

var realPath = path.join(webapp,pathname); //这里设置自己的文件名称;

var ext = path.extname(realPath);

ext = ext ? ext.slice(1) : 'unknown';

fs.exists(realPath,function (exists) {

//console.log("file is exists:"+exists+" file path: " + realPath + "");

if (!exists) {

response.writeHead(404,{

'Content-Type': 'text/plain'

});

response.write("This request URL " + pathname + " was not found on this server.");

response.end();

} else {

fs.readFile(realPath,"binary",function (err,file) {

if (err) {

response.writeHead(500,{

'Content-Type': 'text/plain'

});

//response.end(err);

response.end("内部错误,请联系管理员");

} else {

var contentType = config[ext] || "text/plain";

response.writeHead(200,{

'Content-Type': contentType

});

response.write(file,"binary");

response.end();

}

});

}

});

}

});

server.listen(PORT);

console.log("Server runing at port: " + PORT + ".");

config.js,用于配置。

dio/x-wav","wma": "audio/x-ms-wma","wmv": "video/x-ms-wmv","xml": "text/xml"

};

exports.netServerUrlFlag = "NETSERVER";

exports.netServerhost = "";

exports.netServerport = "";

exports.javaServerUrlFlag = "JAVASERVER";

exports.javaServerhost = ""; //转发的地址

exports.javaServerport = "";//转发的端口

exports.fileServerUrlFlag="FileUpload";

exports.webapp = "public";//项目目录

exports.webport = "82"; //项目启动端口

总结

以上所述是小编给大家介绍的Node做中转服务器转发接口。编程之家 jb51.cc 收集整理的教程希望能对你有所帮助,如果觉得编程之家不错,可分享给好友!感谢支持。

总结

以上是编程之家为你收集整理的Node做中转服务器转发接口全部内容,希望文章能够帮你解决Node做中转服务器转发接口所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

如您喜欢寻找一群志同道合、互帮互助的学习伙伴,可以点击下方链接加入:

编程之家官方1群

编程之家官方2群

编程之家官方3群

编程之家官方4群

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值