如何使javascript库在node js中工作以进行服务器端操作

如何使javascript库在node js中工作以进行服务器端操作,javascript,node.js,design-patterns,module,Javascript,Node.js,Design Patterns,Module,我正在尝试为一个项目创建一个库,如下所示: module.exports = Diary; function Diary() { someFunction = function( message ) { console.log(message) } function D() { return new D._Section; } D.about = { version: 1.0 }; D

我正在尝试为一个项目创建一个库,如下所示:

module.exports = Diary;
function Diary() {

    someFunction = function( message ) {
        console.log(message)
    }

    function D() {
        return new D._Section;
    }

    D.about = {
        version: 1.0
    };

    D.toString = function () {
        return  "Diary "+ D.about.version;
    };

    var Section = function () {
        this.Pages = []
    }

    D._Section = Section;

    //to extend the library for plugins usage
    D.fn = sectionproto = Section.prototype = D.prototype;

    sectionproto.addPage = function (data) {
        this.Pages.push(data)
        conole.log(this.Pages)
    };
    return D;
};
var Diary = require('./diary.js')();
// Note -------------------------^^
var myDiary = new Diary();
这样做的主要目的是为服务器端和客户端操作使用相同的库,这样我们就可以拥有相同的代码库

这个问题是当我在节点应用程序中使用这个时

var Diary = require('./diary.js');
var myDiary = new Diary();

console.log(myDiary.addPage('some text on page'))
然后运行它,它会抛出一个错误 TypeError:myDiary.addPage不是函数

我不知道该怎么做才能让node js发挥作用,因为我们的客户端应用程序非常庞大,如果我们不得不采用其他模式,对其进行更改将需要一些努力

第一个问题是: 1.这是正确的方法还是我们需要寻找其他方法
2.如果这可以在node js应用程序上运行,那么在对库进行最小更改的情况下,主要问题是您正在导出整个
日志
函数,但使用它时却好像收到了它的返回值(
d
函数)

您导出它的方式是这样使用的:

module.exports = Diary;
function Diary() {

    someFunction = function( message ) {
        console.log(message)
    }

    function D() {
        return new D._Section;
    }

    D.about = {
        version: 1.0
    };

    D.toString = function () {
        return  "Diary "+ D.about.version;
    };

    var Section = function () {
        this.Pages = []
    }

    D._Section = Section;

    //to extend the library for plugins usage
    D.fn = sectionproto = Section.prototype = D.prototype;

    sectionproto.addPage = function (data) {
        this.Pages.push(data)
        conole.log(this.Pages)
    };
    return D;
};
var Diary = require('./diary.js')();
// Note -------------------------^^
var myDiary = new Diary();
但请注意,这意味着每次导入都将创建自己的
D
函数和相关内容

或者,导出调用
日记
的结果,但是
日记
函数没有任何用途


其他问题包括:

  • 不声明
    someFunction
    sectionproto
    就是*的牺牲品。一定要声明变量
  • 结构过于复杂,没有任何明显的原因,需要如此复杂

*(披露:这是我贫血小博客上的一篇帖子)

这真是令人费解。所有看似不必要的层的原因是什么?我从Raphaeljs复制了这个结构,因为我需要一些层用于这个应用程序,是的,我正在尝试学习Javascript和Nodejs@JasonSebringthanks,以获得帮助,代码正在使用它。当然,它将涵盖这些全球声明。