2013-04-05 24 views
21

Khi cố gắng để tạo ra một mô hình trong Mongoose tôi nhận được lỗi saulỗi Mongoose vào việc tạo mẫu (sử dụng Bước)

[Lỗi Loại: Không thể đọc thuộc 'tùy chọn' không xác định]

Tôi không có ý tưởng gì gây ra nó

"use strict"; 
var Step = require('step'); 
var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

function randomFunction() { 
    var categorySchema = new Schema({ 
     id: Number, 
     name: String, 
     description: String 
    }, { collection: 'categories' }); 

    var Category; 

    //... 

    mongoose.connect('mongodb://localhost/grouping'); 

    new Step(
     function() { //Connect to mongodb 
      var db = mongoose.connection; 
      db.on('error', console.error.bind(console, 'connection error:')); 
      db.on('open', this); 
     }, 
     function() { //Create model 
      console.log(categorySchema); //Logs the schema object right 
      Category = mongoose.Model('Category', categorySchema); 


     }, 
     function(err) { 
      console.log(err); //Error here 
     }); 
    //... 
} 

Tôi rất mới đối với Mongo (và khá mới đối với nút) nhưng tôi hoàn toàn không biết ý nghĩa của thông báo lỗi.

Tôi biết tôi có các tùy chọn được xác định trong lược đồ nhưng tôi không thể thấy nó sẽ không xác định, bất kỳ ai có thể chỉ cho tôi đúng hướng không? Lưu ý - đây là một cắt lớn của mã ban đầu, đây là cấu trúc chung (có thực sự một số mã dưới đây mongoose.Model('Cat... nhưng nó bị bỏ qua, tôi giả định vì lỗi được ném bởi các cuộc gọi mongoose.Model không phải là ngay cả một console.log("Hello"); được in ngay sau khi nó.

EDIT tôi đã phát hiện ra rằng bên Mongoose (mongoose/lib/document.js) cố gắng để có được this.schema nhưng nó không xác định

function Document (obj, fields, skipId) { //Line 37 
    this.$__ = new InternalCache; 
    this.isNew = true; 
    this.errors = undefined; 

    var schema = this.schema; //-> undefined 
    // ... 
+0

Bạn có chắc chắn, bạn đang kết nối với MongoDB, mã phù hợp với kết nối là 'mongoose.connect ('MongoDB: // host/cơ sở dữ liệu', function (err) {console.log ('error occured', err);}); '? – drinchev

+0

Tôi sẽ thử điều đó, cảm ơn. Tôi thấy rằng mã kết nối khác ở đâu đó hoạt động tốt hơn cho tôi bởi vì nó được tách ra – Sam

+0

Hóa ra tôi đã bỏ lỡ một dòng từ câu hỏi của tôi, tôi sẽ thêm nó vào – Sam

Trả lời

74

Vì vậy, nó quay ra tôi không phải là loại observent,

mongoose.Model nên mongoose.model

+18

Tôi cũng có vẻ không quan sát được. –

+2

Tôi, năm, có vẻ không quan sát. – Frosty619

+2

Tôi, sáu, có vẻ không quan sát. –

3

Bạn cũng có thể nhận được lỗi tương tự cho gọi này.

MyModel = new mongoose.model('<your model name>', mySchema)

nếu bạn xóa mới.

0

Thông báo lỗi này cũng sẽ được hiển thị khi sử dụng phương pháp mô hình trong một chuỗi Promise như:

const Product = mongoose.model('Product', ProductSchema) 

ScrapProducts() 
    .then(mapToModel) 
    .then(Product.create) 

Để giải quyết nó, bạn phải đảm bảo rằng mô hình mongoose bạn bảo bối cảnh ban đầu của nó.

const Product = mongoose.model('Product', ProductSchema) 

ScrapProducts() 
    .then(mapToModel) 
    .then(function(data) { 
    return Product.create(data) 
    }) 

hoặc tốt hơn:

const Product = mongoose.model('Product', ProductSchema) 

ScrapProducts() 
    .then(mapToModel) 
    .then(Product.create.bind(Product)) 
Các vấn đề liên quan