Mongodb 连接失败,怎么避免抛错影响正常流程

如题

网站mongodb连接不上的时候,就会抛出错误,阻碍了流程正常的运行。

mongodb只用来存log等非关键信息.

所有代码都包了try catch ,不可能每个地方都特殊处理吧?

而且连接失败了,我的代码还是直接 $this->di->mongo->find($param);
即使处理了连接异常,但是有好多代码都是直接用对象->find 这里还是会报错。。
也就是说得包一层find。。。

最终: 我的问题,就是在mongo的connect函数中包一次try catch就行了,这样就不太会被外层的try catch捕捉了。。。 还是有点奇怪,最最外面主函数还有一层try catch为什么就不捕捉了呢。。。

阅读 5.8k
3 个回答

操作 mongodb 的时候,是不是需要封装一个类,链接 mongodb 的时候就是调用 类的 connect 的方法,记录 log 就是调用类的 log 方法,那么只需要在这个类中处理异常吧。

代码粗糙,意会吧

class mongo
{

    private $isConnect = false;

    function connect()
    {
        try {
            $this->setConnectStatus(true);
        } catch (\Exception $e) {
            $this->setConnectStatus(false);
        }
    }

    function setConnectStatus($bool)
    {
        $this->isConnect = $bool;
    }

    function getConnectStatus()
    {
        return $this->isConnect;
    }

    function log($message)
    {
        if ($this->getConnectStatus()) {

        } else {
            // do nothing
        }
    }
}

PHP操作MongoDB的 exception handling没有什么特别的地方,和其他的场景一样,使用try catch来处理。

PHP MongDB client包含了一些exeception的类:

MongoDB\Driver\Exception\AuthenticationException 
MongoDB\Driver\Exception\BulkWriteException 
MongoDB\Driver\Exception\ConnectionException 
MongoDB\Driver\Exception\ConnectionTimeoutException 
MongoDB\Driver\Exception\Exception 
MongoDB\Driver\Exception\ExecutionTimeoutException 
MongoDB\Driver\Exception\InvalidArgumentException 
MongoDB\Driver\Exception\LogicException 
MongoDB\Driver\Exception\RuntimeException 
MongoDB\Driver\Exception\SSLConnectionException 
MongoDB\Driver\Exception\UnexpectedValueException 
MongoDB\Driver\Exception\WriteException 

但是您估计为了简化,只会统一处理MongoDB\Exception\Exception

正如一楼的朋友所言,可以做一些类来封装此类操作使得事情简洁一些。

供参考。

Love MongoDB! Have Fun!

既然你所有的地方都用到了它,何不把它封装起来集中处理呢

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题