TypeError对象不是函数

时间:2016-05-22 05:46:45

标签: node.js mongodb export

我正在使用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时,我会在“" new" 并写入" TypeError:object不是函数"

我不知道为什么会这样。谢谢。

2 个答案:

答案 0 :(得分:0)

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

在program.js中,您正在创建一个mongoose模式的新实例。

var schema = new mongoose.Schema(productSchema);

... more code ...

return schema;

在您的其他js文件中,您需要产品。此时,product.js已经向您返回了一个对象。一个新的mongoose架构。这是一个你称之为产品的对象。

然后,您尝试通过在产品OBJECT上调用new来创建它的新实例。无法在对象文字上调用New。它只能在函数上调用。

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

答案 1 :(得分: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);