Node.js-异步读取

读取后缀名文件 异步读取 使用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());
       });

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值