无法引用express中其他文件中定义的对象

时间:2013-06-02 06:57:07

标签: node.js express

我正在使用 node.js express 框架制作应用程序。我必须在我的应用程序中使用继承等OOP功能。

我在 routes / model 文件夹中创建了一个简单的类。

exports.Rectangle = function(x,y)
{
    this.x = x;
    this.y = y; 
}

Rectangle.prototype.getArea = function()
{
    return (this.x * this.y);
}

Rectangle.prototype.toString = function()
{
    var tmp = "Rectangle " + this.x + " : " + this.y;

    return tmp;
}

我的 routes / index.js 是这样的:

exports.index = function(req, res){

var RectangleClass = require('./model/Rectangle.js');


var rect1 = new RectangleClass.Rectangle(4,6);


console.log(rect1.getArea());
console.log("Rect: " + rect1);

res.send("hello");

};

当我运行应用程序时,我收到错误: 500 ReferenceError:未定义矩形 错误显示在routes / model / Rectangle.js中的Rectangle.prototype.getArea = function()行

但是,如果我在我的index.js文件中复制粘贴Rectangle类结构,那么一切正常。但我有很多类,我不想在一个文件中定义它们。如何引用其他文件中定义的对象?

2 个答案:

答案 0 :(得分:1)

这是初始设置中的问题:

exports.Rectangle = function(x, y) {
  ...
}
Rectangle.prototype.getArea = ...

exports.Rectangle无法在当前模块中神奇地创建名为Rectangle的变量,因此当您尝试使用undefined时会出现Rectangle.prototype错误。

有几种解决方案:

// one solution
var Rectangle = exports.Rectangle = function(x, y) { ... }
Rectangle.prototype.getArea = ...

// another solution
var Rectangle = function(x, y) { ... }
Rectangle.prototype.getArea = ...
exports = Rectangle;

// yet another solution
exports.Rectangle = function(x, y) { ... }
exports.Rectangle.prototype.getArea = ...

或者你自己发现的那个,虽然创建这样的工厂功能并不是真的有必要:)

答案 1 :(得分:0)

这突然发生在我身上。我使用getter方法创建并返回一个Rectangle对象。在Rectangle.js中进行了以下更改。

exports.getRectangle = function(x,y)
{
    var r = new Rectangle(x,y);

    return r;
}



Rectangle = function(x,y)
{
    this.x = x;
    this.y = y; 
}

其他方法保持不变。

在我的index.js文件中,而不是

var r = new RectangleClass.Rectangle(6,4);

我用过

var r = RectangleClass.getRectangle(6,4);