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开发者是如何做的.那里有很多好的(和坏的)!
最好,
克雷格
你可以看到一个带有 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)
您可以创建类似的文件系统结构以获得更大的灵活性。您可以需要整个库,只有一个命名空间或单个函数。
这对性能更好,因为您只使用您需要的内容并且获得了内存使用量。
归档时间: |
|
查看次数: |
41321 次 |
最近记录: |