• node基础10:处理异常


    1.处理异常

    当发生异常时,如果不作处理,那么服务器会奔溃。由于node的异步调用的特性,所以不但要考虑主程序的异常,还有处理异步调用的异常。

    代码如下:

    /**
     * server.js 
     */
    var http = require('http');
    var url = require('url');
    var router = require('./router');
    var exception = require('./exception')
    http.createServer(function(req, res){
        if ( req.url !== '/favicon.ico'){
            pathname = url.parse(req.url).pathname.replace(///,'');
            console.log(pathname);
            try {
                // console.log('success');
                // data = exception.exp(1);
                // res.write(data);
                // res.end();
                router[pathname](req, res);
            } catch(e) {
                console.log('error:'+e);
                res.writeHead(200, {'Content-Type': 'text/html;charset=utf-8'});
                res.write(e.toString());
                res.end();
            };
        }
    }).listen(3000);
    console.log("server running at http:127.0.0.1:3000");
    /**
     * router.js
     */
    var fs = require('fs');
    module.exports = {
        login: function(req, res){
            fs.readFile('./login.html', function(err, data){
                if( err){
                    console.log(err);
                    res.writeHead(200, {'Content-Type': 'text/html;charset=utf-8'})
                    res.write(err.toString());
                    res.end();
                    return;
                } else {
                    res.writeHead(200, {'Content-Type': 'text/html;charset=utf-8'})
                    res.write(data);
                    res.end();
                }
            })
        },
        register:function(req, res){
            fs.readFile('.register.html', function(err, data){
                if(err) {
                    console.log(err);
                    res.writeHead(200, {'Content-Type': 'text/html;charset=utf-8'})
                    res.write(err.toString());
                    res.end();
                    return;
                } else{
                    res.writeHead(200, {'Content-Type': 'text/html;charset=utf-8'});
                    res.write(data);
                    res.end();
                }
            })
        },
        showImage:function(req, res){
            fs.readFile('./test.png',function(err, data){
                if (err) {
                    console.log(err);
                    return;
                } else{
                    console.log("开始读取图片");
                    res.writeHead(200, {'Content-Type':'image/jpeg'});
                    res.write(data);
                    res.end();//写在互调函数外面会报错的哟
                }
            })
        }
    
    }
    //exception.js
    module.exports = {
        exp:function(flag){
            if (flag==0) {
                throw "我是例外"
            }
            return 'success';
        }
    }

    在上述的 try {} catch(err) {} 中,虽然 try中无错误,但是在try 中执行了一个异步调用,这个调用不会被主程序捕获到,所以在异步调用中再次处理异常。

  • 相关阅读:
    为当前用户创建cron服务
    PHP程序员的简单运维
    mysql事件学习
    ubantu16.04服务器错误提示没有安装php_fileinfo扩展
    XAMPP配置vhosts多站点/绝对正确
    yii2框架获取刚插入数据库的id (原创)
    ajax详解
    Git密钥生成步骤SSH Key
    jquery禁用select和取消禁用
    a标签实现不跳转点击
  • 原文地址:https://www.cnblogs.com/noper/p/6254123.html
Copyright © 2020-2023  润新知