20 路由改写Nodejs异步读/写

本文介绍了如何在Node.js中改写路由并实现异步读写文件。通过示例代码展示了使用recall回调函数方式以及通过传参response进行写法优化,涵盖了文本文件和图片格式文件的响应头设置。
摘要由CSDN通过智能技术生成

response.writeHead(200, {‘Content-Type’:‘text/html; charset=utf-8’}); // 针对文本文件
response.writeHead(200, {‘Content-Type’:‘image/jpeg’}); // 针对图片格式文件
结合编码格式差异,对路由进行改写:

Nodejs访问/调用文件
// d20_routhtml.js
var http=require('http');
var url=require('url');
var router=require('./models/d20_router');
http.createServer(function(request, response){
    //response.writeHead(200,{'Content-Type':'image/jpeg'}) //写到router
    if(request.url!=='/favicon.ico'){ //清除2次访问
    	var pathname=url.parse(request.url).pathname;
    	pathname=pathname.replace(/\//,''); //替换(/)
    	console.log(pathname);
    	router[pathname](request, response);
    	// response.write('主程序执行完毕');
        // console.log('主程序执行完毕');
    }
}).listen(8000); //监听端口
console.log('Server running at http://127.0.0.1:8000/');
Nodejs路由文件: recall回调函数方式
// d20_router.js
var optfile=require('./d20_optFile');
function getRecall(rq, rs){
	rs.writeHead(200, {'Content-Type':'text/html; charset=utf-8'});
	function recall(data){
		rs.write(data);
		rs.end(''); //不可省略
    }
    return recall;
}

module.exports={
	login:function(req, res){
		var recall=getRecall(req, res);
		optfile.readfileAsync('./views/login.html', recall); //异步调用	
	},
	sign:function(req, res){
		var recall=getRecall(req, res);
		optfile.readfileAsync('./views/sign.html',recall);
	},
	writeFile: function(req, res){
		var recall=getRecall(req, res);
    	optfile.writefileAsync('./views/one.txt','我写入的文件',recall)
	},
	showimg: function(req, res){
		res.writeHead(200, {'Content-Type':'image/jpeg'});
    	optfile.readImg('./imgs/mn.jpeg',res);
	}
}
Nodejs异步读取文件: recall回调函数方式
// d20_optfile.js
var fs=require('fs'); //node.js自带fs文件操作类
module.exports={
	readfileAsync: function(path, recall){ //异步执行
		fs.readFile(path, function(err,data){
			if(err){console.log(err);
			}else{
				console.log(data); //后端输出 data.toString()可转文本
				recall(data);
			}
		});
		console.log('异步方法执行完毕');
	},
	readImg: function(path, res){ //异步执行
		fs.readFile(path,'binary', function(err,filedata){
			if(err){
				console.log(err);
				return;
			}else{
				res.write(filedata, 'binary'); //二进制发送
				res.end('');
			}
		});
	},
	writefileAsync: function(path, data, recall){ //异步写入
		fs.writeFile(path, data, function(err){
			if(err){throw err}
			console.log('It\'s saved!'); //后端输出
			recall('写文件成功');
		});
		console.log('异步方法执行完毕');
	}
}

路由文件及异步读取文件,都可改为response传参,且代码更简洁,示例代码如下(调用文件代码不变):

Nodejs路由文件: 传参response写法
// d21_router.js
var optfile=require('./d21_optFile');
module.exports={
	login:function(req, res){
		res.writeHead(200, {'Content-Type':'text/html; charset=utf-8'});
		optfile.readfileAsync('./views/login.html', res); //异步调用
	},
	sign:function(req, res){
		res.writeHead(200, {'Content-Type':'text/html; charset=utf-8'});
		optfile.readfileAsync('./views/sign.html',res);
	},
	writeFile: function(req, res){
		res.writeHead(200, {'Content-Type':'text/html; charset=utf-8'});
    	optfile.writefileAsync('./views/one.txt','我写入的文件',res)
	},
	showimg: function(req, res){
		res.writeHead(200, {'Content-Type':'image/jpeg'});
    	optfile.readImg('./imgs/mn.jpeg',res);
	}
}
Nodejs异步读取文件: 传参response写法
// d21_optfile.js
var fs=require('fs'); //node.js自带fs文件操作类
module.exports={
	readfileAsync: function(path, res){ //异步执行
		fs.readFile(path, function(err,data){
			if(err){console.log(err);
			}else{
				console.log(data); //后端输出 data.toString()可转文本
				res.write(data);
				res.end(''); //不可省略
			}
		});
	},
	readImg: function(path, res){ //异步执行
		fs.readFile(path,'binary', function(err,filedata){
			if(err){
				console.log(err);
				return;
			}else{
				res.write(filedata, 'binary'); // 二进制前端输出
				res.end();
			}
		});
	},
	writefileAsync: function(path, data, res){ //异步写入
		fs.writeFile(path, data, function(err){
			if(err){throw err}
			console.log('It\'s saved!'); //后端输出
			res.write('It\'s saved!');
			res.end(''); //不可省略
		});
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值