在NodeJS中构造helper函数的最佳方式
Best way to structure helpers functions in NodeJS
我正试图为我的NodeJS项目构建一组utils。这些帮助将包括:文本utils(如子字符串,控制台日志记录等),以及更具体的帮助,如解析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/帮助/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/帮助/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/帮助/twitter.js
function Twitter() {
};
Twitter.prototype.parseTweet = function(data) {
return data;
};
module.exports = Twitter
这是正确的方法吗?是我做错了什么,还是会减慢表演速度等等?
为了澄清我是如何理解你的帖子的,我看到了两个问题:
- 我如何在文件中构建代码/方法,文件代表一类实用程序函数
- 如何将这些分类文件组织成一个更大的库
在一个类别中构造方法
与其将所有类别特定的函数设置为对象(例如Twitter或Text)的方法,不如将函数导出到以其命名的文件中。因为似乎你正在传递你想要使用的数据,所以没有必要使函数实例方法的一些空类。
如果你的Twitter或Text的使用模式通常有你想要保持状态的类变量,并且你想实例化Text或Twitter对象来使用你的示例,那么我认为这将是合适的。当我在我的项目中设置util库时,它通常是一堆导出的函数,组成一个模块,而不是一个导出的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库时,只需:
/*
* 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开发人员是如何做事情的,这对我很有帮助。有那么多好的(和坏的)!
您可以使用lodash看到utils库示例。
Lodash是一个类似下划线的实用程序库。这个库的文件系统结构类似于。
它把函数分成几类。每个类别都是一个带有index.js文件的文件夹,该文件将该类别的每个函数包含在名称空间(文字对象)中!
Lodash/
Objects/
Function1.js
Functions2.js
....
Index.js
Array/
Function1.js
...
Index.js
在你的代码中,你可以这样做:
var objectsUtils = require("lodash/objects");
var foreach = require("lodash/array/each");
您可以创建一个类似的文件系统结构,以获得更大的灵活性。您可以需要整个库,只需要一个命名空间或单个函数。
这对性能更好,因为您只使用您需要的,并且有内存使用增益。
- 在phonegap中为android调用onload函数的最佳方式
- 在javascript函数的循环中设置全局布尔变量的最佳语法
- JavaScript - 创建可链接函数时的最佳方法是什么
- PHP 重复函数调用,最佳实践
- 返回多个变量的 JavaScript 函数:数组与对象.最佳实践是什么
- 将同步函数包装到承诺中的最佳方法是什么?
- 最佳实践:在网页对用户可见后调用.Net函数
- Angular:将对象存储在服务中以在视图中显示和将crud函数存储到服务器的最佳方式是什么
- 在执行另一个异步函数之前,只有当条件为true时,才执行某些异步函数的最佳方法
- 确定公开JS实用程序函数的最佳模式
- 这是显示javascript函数返回值的最佳方式吗
- 在javascript中调用最内部函数的最佳方法
- 在方法中的函数中引用 CoffeeScript 类中的“this”的最佳方式是什么?
- 如何在函数中注入/覆盖代码?最佳实践
- 检测何时从控制台调用函数的最佳方法
- 在 JavaScript 中延迟一个又一个函数的最佳方法
- 成员函数的 JS 最佳实践
- 使用string.format,最佳方法和替代方案在服务器端创建javascript函数
- 在本地将单个变量传递给具有多个参数的函数的最佳方法是什么
- 链接多个.然后,一些没有异步代码的函数.最佳实践