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(''); //不可省略
});
}
}