2016-05-22 88 views
0

我发展与MongoDB的 node.js的应用我有文件: product.js和displaycost.js类型错误的对象不是一个函数

这是产品的.js:

var mongoose = require('mongoose'); 
var Category = require('./category'); 

var productSchema = { 
name:{type: String, require: true}, 
//Pictures mus start with "http://" 
pictures:[{type:String, match: /^http:\/\//i}], 
price:{ 
amount:{type: Number, required: true}, 
//ONly 3 supported currencies for now 
currency:{ 
type: String, 
enum:['USD','EUR','GBP'], 
required: true 
} 
}, 
category: Category.categorySchema 
}; 
var schema = new mongoose.Schema(productSchema); 

var currencySymbols ={ 
'USD': '$', 
'EUR':'€', 
'GBP':'£' 
}; 

/* 
* 
*/ 
schema.virtual('displayPrice').get(function(){ 
return currencySymbols[this.price.currency] + 
'' + this.price.amount; 
}); 

schema.set('toObject', {virtuals:true}); 
schema.set('toJSON', {virtuals:true}); 

module.exports = schema; 

我需要的是创建一个“productSchema” 记录我这个尝试:

var Product = require('./product.js'); 

var p = new Product({ 
name: 'test', 
price:{ 
amount : 5, 
currency: 'USD' 
}, 
category: { 
name: 'test' 
} 
}); 

console.log(p.displayPrice); // "$5" 

p.price.amount = 20; 
console.log(p.displayPrice); //" $20" 

//{... "displayPrice: "$20",...} 
console.log(JSON.stringify(p)); 

var obj = p.toObject(); 

但是当我运行displaycost.js扔我一个埃罗r在单词“new” 并写入“TypeError:object is a function”

我不知道为什么会发生这种情况。谢谢。

回答

0

你缺少与模型名称导出猫鼬模型。

var mongoose = require('mongoose'), 
    Schema = mongoose.Schema, 
    Category = require('./category'); 

var productSchema = new Schema({ 
    name: {type: String, require: true}, 
    pictures: [{type: String, match: /^http:\/\//i}], 
    price: { 
     amount: {type: Number, required: true}, 
     currency: { 
      type: String, 
      enum: ['USD', 'EUR', 'GBP'], 
      required: true 
     } 
    }, 
    category: Category 
}); 

var currencySymbols = { 
    'USD': '$', 
    'EUR': '€', 
    'GBP': '£' 
}; 

productSchema.virtual('displayPrice').get(function() { 
    return currencySymbols[this.price.currency] + 
     '' + this.price.amount; 
}); 

productSchema.set('toObject', {virtuals: true}); 
productSchema.set('toJSON', {virtuals: true}); 

module.exports = mongoose.model('Product', productSchema); 
+0

谢谢,它的工作原理。因此,我感到头痛。 – SantiagoGlz

0

“new”只能在函数上调用。不是一个对象。

在program.js中,您正在创建猫鼬模式的新实例。

var schema = new mongoose.Schema(productSchema); 

... more code ... 

return schema; 

在您的其他js文件中,您需要产品。在这个时候,product.js已经返回了一个对象给你。一种新的猫鼬模式。这是您称为产品的对象。

然后尝试通过在产品OBJECT上调用new来创建它的新实例。新的对象字面值不能被调用。它只能在函数上调用。

我不相信你需要在product.js中创建一个新的模式实例,只需返回创建该模式的函数即可。然后在你需要它的时候再调用它,就像你在第二个文件中一样。

相关问题