子类下的NodeJS组函数

时间:2017-01-05 00:20:07

标签: javascript node.js

或许我没有正确地说出这个标题。以下是我试图做的解释。

我为我的项目创建了一个helper.js文件。里面它包含许多功能,我在下面粘贴了一个功能。我使用module.exports导出此函数。

function generateInternalError(message, stack_trace) {
    if (process.env.NODE_ENV == 'dev') {
        console.log({ message: message, stack_trace: stack_trace });
    } else {
        console.log({message: message});
    }
}

module.exports = {
    generateInternalError: generateInternalError
};

我想要使用此功能,我会打电话:

helper.generateInternalError('Not Found',new Error().stack);

它按预期工作。

但是,我的任务是创建功能类别。基本上我需要以下内容:

helper.errors.generateInternalError('Not Found',new Error().stack);

我似乎无法找到在NodeJS中导出一类函数或函数对象的正确方法,这样我就不会收到如下错误:

TypeError: helper.errors.generateClientError is not a function

感谢任何帮助。

谢谢

3 个答案:

答案 0 :(得分:4)

文件的module.exports属性只是将名称映射到函数的对象。您可以任意定义它,例如:

module.exports = {
    errors: {
        generateInternalError,
        ...
    },
    ...
};

然后,将定义require('./helper').errors.generateInternalError

答案 1 :(得分:1)

如果一切都是帮手的话,

helpers就是噪音,所以放弃它。只需使用常规模块,除非您确定在该类别中只有一个函数导出多个函数。如果您只使用module.exports导出一个函数,那么您不需要将其作为对象的属性来执行,这也意味着您可以只说const genError=require('./errors')

不要像helpers.errors.someErrorFunc这样做,因为助手是噪音,而你只使用单独的模块文件制作类别。不要试图让Node.js看起来像Java或同样可怕的东西。

答案 2 :(得分:0)

将助手子类构建在单独的文件中可能会更好。

实施例

的src / helpers.js SRC /助理/ SRC /助手/ errors.js

档案 helpers.js

module.exports = {
   errors: require('./helpers/errors')
}

档案 helpers / errors.js

module.exports = {
    generateInternalError: function(){
        //write some internal error code here
    }
};

像这样构建代码将使您的根帮助程序文件非常有条理,并创建一个易于为新子类复制的模式。

如果你更喜欢模块化程度较低的方法,你可以简单地返回一个大的JSON对象,就像其他人已经证明的那样......

module.exports = {
    errors: {
        generateInternalError: function(){
            //internal error code
        },
        generateDatabaseError: function(){
            //db error code
        }
    }
}