当前位置: 首页 > 面试题库 >

在NodeJS中构造辅助函数的最佳方法

祁景山
2023-03-14
问题内容

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

因此,我试图将模块划分为不同的文件,并对每件事的含义非常清楚。

例如,我想实现以下目标:

var helpers = require("helpers");

var Utils = new helpers.Utils();

// working with text
Utils.text.cleanText("blahblalh");
// working with a tweet
Utils.twitter.parseTweet(tweet);

如您所见,我通过调用非常特定的方法和子方法将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);
    }
};

//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;

//node_modules/helpers/twitter.js

function Twitter() {

};

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

module.exports = Twitter

这是正确的方法吗?我是在做错什么,还是会减慢性能等等?


问题答案:

为了阐明我对您的帖子的理解方式,我看到两个问题:

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

类别内的构造方法

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

如果您的Twitter或Text使用模式通常具有要保持状态的类变量,并且您想实例化Text或Twitter对象以使用您的示例,那么我认为这是适当的。当我在项目中设置实用程序库时,通常是一堆导出的函数组成一个模块,而不是导出的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
    }
}

或者,您可以通过以下方式进行操作:

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

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

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

就组织实用程序方法而言,Luca的示例很好。我已经组织了一些类似的事情:

utils-module/
    lib/
        text.js  <-- this is the example file shown above
        twitter.js
    test/
    index.js

在哪里index.js做类似

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

exports.Text = textUtils;

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

/*
 * 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;

希望有帮助。当我第一次学习时,查看流行的,受人尊敬的库对了解经验丰富的node / javascript开发人员的工作方式很有帮助。那里有很多好(坏)的!



 类似资料:
  • 问题内容: 您不能在PHP类中放置两个具有唯一参数签名的__construct函数。我想这样做: 用PHP做到这一点的最佳方法是什么? 问题答案: 我可能会做这样的事情: 然后,如果我想要一个我知道ID的学生: 或者,如果我有数据库行的数组: 从技术上讲,您不是在构建多个构造函数,而只是在构建静态辅助方法,而是通过这种方式避免在构造函数中使用大量意大利面条式代码。

  • 问题内容: 有一些类似的话题,但我找不到一个有足够答案的。 我想知道Java中构造函数重载的最佳实践是什么。关于这个问题我已经有了自己的想法,但我想听听更多的建议。 我指的是简单类中的构造函数重载和继承已重载类(意味着基类具有重载构造函数)时的构造函数重载。 问题答案: 虽然没有“官方指导方针”,但我遵循亲干原则。使重载构造函数尽可能简单,最简单的方法是它们只调用this(…)。只需要检查一次参数

  • 简介 Laravel 包含各种各样的全局「辅助」PHP 函数,框架本身也大量地使用了这些功能;如果你觉得方便,你可以在你的应用中自由的使用它们。 可用方法 数组 & 对象 array_add array_collapse array_divide array_dot array_except array_first array_flatten array_forget array_get arra

  • 列标字符转化 获取扩展版本 查看作者信息

  • 辅助函数,顾名思义,是帮助我们完成特定任务的函数。每个辅助函数文件仅仅是一些函数的集合。例如,URL Helpers 可以帮助我们创建链接,Form Helpers 可以帮助我们创建表单,Text Helpers 提供一系列的格式化输出方式,Cookie Helpers 能帮助我们设置和读取COOKIE, File Helpers 能帮助我们处理文件,等等。 跟其他部分不同的是,辅助函数不是用类的

  • 辅助函数,顾名思义,是帮助我们完成特定任务的函数。每个辅助函数文件都是某一类 函数的集合。例如, URL 辅助函数 帮助我们创建链接,表单辅助函数**帮助 我们创建表单元素,**本文辅助函数 帮助我们处理文本的格式化,Cookie 辅助函数 帮助我们读取或设置 Cookie ,文件辅助函数 帮助我们处理文件,等等等等。 不同于 CodeIgniter 中的大多数系统,辅助函数没有使用面向对象的方式