Javascript - 在NodeJS中构造帮助程序函数的最佳方法

Ano*_*ous 27 javascript node.js

我正在尝试为我的NodeJS项目构建一组utils.这些帮助程序将包括:text utils(如子字符串,控制台日志记录等),以及更具体的帮助程序,如解析推文的文本.

因此,我试图将模块划分为不同的文件,并清楚地了解每个事情的意图.

例如,我想实现这个目标:

var helpers = require("helpers");

var Utils = new helpers.Utils();

// working with text
Utils.text.cleanText("blahblalh");
// working with a tweet
Utils.twitter.parseTweet(tweet);
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我通过调用非常具体的方法和子方法来使用Utils来处理不同的事情.

我试图了解继承如何在这里工作,但我有点失落.

这就是我正在做的(一些粗略的示例代码):

//node_modules/helpers/index.js

var Text = require('./text');
var Twitter = require('./twitter');

function Utils() {

}

Utils.prototype.text = {
    cleanText: function(text) {
        Text.cleanText(text);
    }
};

Utils.prototype.twitter = {
    parseTweet(tweet) {
        Twitter.parseTweet(tweet);
    }
};
Run Code Online (Sandbox Code Playgroud)

//node_modules/helpers/text.js

function Text() {

}

Text.prototype.cleanText = function(text) {
    if (typeof text !== 'undefined') {
        return text.replace(/(\r\n|\n|\r)/gm,"");
    }
    return null;
};

module.exports = Text;
Run Code Online (Sandbox Code Playgroud)

//node_modules/helpers/twitter.js

function Twitter() {

};

Twitter.prototype.parseTweet = function(data) {
    return data;
};

module.exports = Twitter
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?我做错了什么或者可能会减慢表演等等?

我是Node的新手,我想以正确的方式开始.

cpe*_*ra1 70

为了澄清我如何理解你的帖子,我看到两个问题:

  • 如何在文件中构建代码/方法,代表一类实用程序功能的文件
  • 如何将这些分类文件组织到一个更大的库中

构建类别中的方法

您可以将函数导出到以它们命名的文件中,而不是制作对象的所有类别特定函数方法(例如Twitter或Text).由于您似乎传递了要使用的数据,因此无需使用某些空类的函数实例方法.

如果您的Twitter或Text的使用模式通常具有您希望保持状态的类变量,并且您希望实例化Text或Twitter对象以使用您的示例,那么我认为这是合适的.当我在我的项目中设置util libs时,它通常是一组构成模块的导出函数,而不是导出的javascript类.

提供由基于文本的实用程序函数组成的text.js文件的示例可能如下所示:

module.exports = {
    cleanText:function(text) {
        // clean it and return
    },

    isWithinRange(text, min, max) {
        // check if text is between min and max length
    }
}
Run Code Online (Sandbox Code Playgroud)

或者,你可以这样做:

exports.cleanText = function(text) {
    // clean it and return
}

exports.isWithinRange = function (text, min, max) {
    // check if text is between min and max length
}
Run Code Online (Sandbox Code Playgroud)

构建实用程序类别文件以创建更大的实用程序库

至于组织实用方法,Luca的例子很好.我组织了一些类似的东西:

utils-module/
    lib/
        text.js  <-- this is the example file shown above
        twitter.js
    test/
    index.js
Run Code Online (Sandbox Code Playgroud)

index.js在哪里做类似的事情

var textUtils = require('./lib/text');

exports.Text = textUtils;
Run Code Online (Sandbox Code Playgroud)

然后当我想在我的节点API中使用util lib说一些User模型时,它只是:

/*
 * Dependencies
 */
var textUtils = require('path/to/lib').Text;

/*
 * Model
 */
function User() {}

/*
 * Instance Methods
 */
User.prototype.setBio = function(data) {
    this.bio = textUtils.cleanText(data);
}

module.exports = User;
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.当我第一次学习时,查看流行的,备受推崇的库是非常有帮助的,看看更有经验的节点/ javascript开发者是如何做的.那里有很多好的(和坏的)!

最好,

克雷格


Luc*_*llo 8

你可以看到一个带有 lodash 的 utils 库示例。

Lodash 是一个类似于 underscorejs 的实用程序库。这个库有像你这样的文件系统结构。

它按类别划分功能。每个类别都是一个带有 index.js 文件的文件夹,该文件包含该类别的每个函数的命名空间(文字对象)!

Lodash/
   Objects/
       Function1.js
       Functions2.js
       ....
       Index.js
   Array/
       Function1.js
       ...
       Index.js
Run Code Online (Sandbox Code Playgroud)

然后在你的代码中你可以这样做:

var objectsUtils = require("lodash/objects");
var foreach = require("lodash/array/each");
Run Code Online (Sandbox Code Playgroud)

您可以创建类似的文件系统结构以获得更大的灵活性。您可以需要整个库,只有一个命名空间或单个函数。

这对性能更好,因为您只使用您需要的内容并且获得了内存使用量。