我正在尝试为我的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开发人员的工作方式很有帮助。那里有很多好(坏)的!