读取后缀名文件 异步读取 使用es6 异步编程处理
fs.readFile('ExtName/name.json', (err, jsondata) => {
if (err) {
throw err;
}
console.log(jsondata);
});
let ext = JSON.parse(fs.readFileSync('ExtName/mime.json').toString());
server((req, res) => {
//静态web服务器
//localhost:8000 直接访问静态网站的首页
//处理服务两次响应
let urlpath = url.parse(req.url, true);
let pathName = urlpath.pathname;
if (pathName != "/favicon.ico") {
//当路径是localhost:8000 默认 加载首页
if (pathName == "/") {
//默认首页
pathName = "index.html";
}
//使用文件系统 读取页面
console.log(pathName);
fs.readFile('Static/' + pathName, (error, data) => {
if (error) {
console.log(pathName);
console.log("404");
}
//根据不同的文件的后缀名 去设置不同的格式
//获取当前读取文件的后缀名
let extname = path.extname(pathName); //获取文件后缀名的方法
//根据后缀名去匹配显示的格式
res.writeHead(200, `Content-Type:${ext[extname]};charset:utf-8;`);
res.write(data);
res.end();
});
}
});
nodejs 里面的非阻塞io( 阻塞是IO)
异步处理
事件驱动
其他的后端语言 会使用多线程
nodejs是单线程 优势是非阻塞io 一个服务员 同时满足多个客户的需求( 没有多线程)
一个简单的例子
多个文件读取
使用同步读取 一个读取完成等待下一个-- - 阻塞IO
使用异步读取-- --非阻塞IO
异步处理
1.使用回调函数处理
http.createServer((req, res)=>{
res.writeHead(200, "Content-Type:text/html;charset=utf-8;");
//使用异步代码
//fs.readFileSync('stu.txt')//同步代码 阻塞io
//回调函数处理异步
function getData(callback) {
fs.readFile('stu.txt', (err, data) => {
if (err) {throw err;}
callback(data.toString());
});
}
//在外边获取读取的数据 //result = data.toString()
getData((result) => {console.log(result);});
});
2.事件监听数据
fs.readFile('stu.txt', (err, data) => {
if (err) {throw err;}
//发布订阅
eventEmit.emit('mydata', data);
});
//监听订阅
eventEmit.on('mydata', (result) => { //result = data
console.log(result.toString());
});
3.es6 处理
let promise = new Promise((resolve, reject) => {
fs.readFile('stu.txt', (err, data) => {
if (err) {throw err;}
resolve(data); //状态变为resolve 返回data
});
});
promise.then((result) => {
console.log("promise", result.toString());
});
4.es7 async处理
async function getResult() {
try {
let data = await new Promise((resolve, reject) => {
fs.readFile('stu.txt', (err, data) => {
if (err) {throw err;}
resolve(data);//状态变为resolve 返回data
});
});
return data;//函数返回data
}
catch (err) {throw err;}
}
getResult().then((result) => {
console.log("async", result.toString());
});