File size: 4,129 Bytes
e4bf523
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
'use strict'
/**

 * Copyright (c) 2018, OBCon Inc.

 * All rights reserved.

 */

/**

 * @file

 * @copyright OBCon Inc. Korea 2018

 * @author gye hyun james kim [pnuskgh@gmail.com]

 */

class OBConObject {
    constructor() {
    }

    //--- For Common
    loggerError(err) {
        //--- for Mozilla
        if ((err.fileName) && (err.lineNumber) && (err.columnNumber)) {
            logger.error(`Error: ${err.fileName} file ${err.lineNumber} line ${err.columnNumber} column`);
        } else {
            let tmpStackArray = new Error().stack.split('\n');

            if (2 < tmpStackArray.length) {
                let tmpStr = tmpStackArray[2];
                if ((-1 < tmpStr.indexOf('(')) && (-1 < tmpStr.indexOf(')'))) {
                    tmpStr = tmpStr.substring(tmpStr.indexOf('(') + 1, tmpStr.indexOf(')'));
            
                    let tmpArray = tmpStr.split(':');
                    if (tmpArray.length == 3) {
                        let fileName = tmpArray[0];
                        let lineNumber = tmpArray[1];
                        let columnNumber = tmpArray[2];
                        fileName = fileName.replace(/\\/g, '/');
                        logger.error(`Error: ${fileName} file ${lineNumber} line ${columnNumber} column`);
                    } else if (tmpArray.length == 4) {
                        let fileName = tmpArray[0] + ':' + tmpArray[1];
                        let lineNumber = tmpArray[2];
                        let columnNumber = tmpArray[3];
                        fileName = fileName.replace(/\\/g, '/');
                        logger.error(`Error: ${fileName} file ${lineNumber} line ${columnNumber} column`);
                    }
                }
            }            
        }

        //--- for 일반적인 오류 처리
        // if (err instanceof Error) {
            if ((err.name) && (err.message)) { logger.error(`${err.name}: ${err.message}`); }
            if (err.stack) { logger.error(err.stack); }
        // }

        //--- for Microsoft
        if (err.number) { logger.error(`Number: ${err.number}`); }
        if (err.description) { logger.error(`Description: ${err.description}`); }

        //--- for others
        if ((err.toSource) && (typeof err.toSource === 'function')) { logger.log(`toSource(): ${err.toSource()}`); }
        if ((err.toString) && (typeof err.toString === 'function')) { logger.log(`toString(): ${err.toString()}`); }

        logger.error('Error stringfy : ' + JSON.stringify(err));
        
        if (err.code) { logger.error('Code : ' + err.code); }
        if (err.original) { logger.error('Original : ' + JSON.stringify(err['original'])); }

        if (err.errors) {
            if (typeof(err.errors) == 'array') {
                err.errors.forEach(function(error) {
                    logger.error('Error array');
                    if (error.type)     { logger.error('    Type: ' + error.type); }
                    if (error.message)  { logger.error('    Message: ' + error.message); }
                    if (error.path)     { logger.error('    Path: ' + error.path); }
                    if (error.value)    { logger.error('    Value: ' + error.value); }
                });
            } else {
                logger.error('Errors : ' + JSON.stringify(err.errors));
            }
        }
    }

    //--- For View
    resJson(res, code, message, data, err) {
        res.writeHead(200, { "Content-Type": "application/json;characterset=utf-8" });
        res.write(JSON.stringify({
            code: code,
            message: message,
            data: data,
            error: err
        }));
        res.end();
    }

    getErrorMessage(err) {
        let message = 'error';
        if (typeof(err.errors) == 'array') {
            if (0 < err.errors.length) {
                message = err.errors[0].message;
            }
        } else {
            logger.error(JSON.stringify(err.errors));
        }
        return message;
    }
}

module.exports = OBConObject;