2016-05-22 17 views
0

ich in node.js mit MongoDB eine Anwendung bin Entwicklung Ich muss Dateien: product.js und displaycost.jsTypeerror-Objekt ist keine Funktion

dieses Produkt Js ist:

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; 

Was ich brauche, ist ein Satz mit „productSchema“ erstellen ich damit versucht:

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(); 

Aber wenn ich die displaycost.js werfen mir eine erro laufen r am Wort "neu" und schreibt "TypeError: Objekt ist keine Funktion"

Ich weiß nicht, warum das passiert. Vielen Dank.

Antwort

0

fehlt Ihnen Export Mungo Modell mit Modellname.

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

Vielen Dank, es funktioniert. Ich hatte deswegen Kopfschmerzen. – SantiagoGlz

0

"neu" kann nur für eine Funktion aufgerufen werden. kein Objekt.

In program.js erstellen Sie eine neue Instanz des Mungo-Schemas.

var schema = new mongoose.Schema(productSchema); 

... more code ... 

return schema; 

In Ihrer anderen js-Datei benötigen Sie ein Produkt. Zu diesem Zeitpunkt hat product.js ein Objekt an Sie zurückgegeben. Ein neues Mungoschema. Es ist ein Objekt, das Sie als Produkt bezeichnen.

Sie versuchen dann, eine neue Instanz davon zu erstellen, indem Sie new für das Produkt OBJECT aufrufen. Neu kann nicht für ein Objektliteral aufgerufen werden. Es kann nur bei einer Funktion aufgerufen werden.

Ich glaube nicht, dass Sie eine neue Instanz des Schemas in product.js erstellen müssen, geben Sie einfach die Funktion zurück, die das Schema erstellt. Dann rufen Sie neu auf, wenn Sie es benötigen, als ob Sie in Ihrer zweiten Datei sind.