Возникли проблемы с экспортом функций модели (Express и Mongoose) - PullRequest
3 голосов
/ 27 мая 2011

Я искал код (https://github.com/cmarin/MongoDB-Node-Express-Blog), чтобы изучить NodeJS, Express, Mongoose, и у меня возникли проблемы с импортом функции 'Poll' из моего файла models.js, в частности, функции 'save'.

Я получаю следующую ошибку:

500 TypeError: Object function (){} has no method 'save'

Это происходит в строке 54 моего app.js. Я не могу сохранить новый опрос, так как не может найти функцию: https://github.com/kelper/Poll/blob/master/app.js

Вот мой файл моделей, и функция сохранения находится в строке 62: https://github.com/kelper/Poll/blob/master/models.js

Еще один быстрый вопрос. Как я могу исключить файлы из фиксации? Я продолжаю фиксировать файлы подкачки и тому подобное.в мой репозиторий.

Если вы видите что-то еще не так с моим кодом, пожалуйста, скажите мне. Я знаю, что один человек упомянул, что мои соглашения об именах сбивают с толку. Как я должен называть свои переменные?

Ответы [ 2 ]

5 голосов
/ 27 мая 2011

PollModel - это конструктор функций, вы хотите создать объект.

var PollModel = require('./models').PollModel; неправильно

var pollModel = new (require('./models').PollModel); верно.

4 голосов
/ 27 мая 2011

Похоже, у вас есть прокси-объект, созданный с использованием прототипа. В этом случае вам придется «обновить» экземпляр, чтобы использовать его, как упоминал Рейнос.

Я думаю, вы ожидаете получить объектный литерал, а не прототипный класс. Что-то вроде:

module.exports.PollModel = {
  findPolls  : function (callback) { ... },
  findById   : function (id, callback) { ... },
  updateById : function (id, body, callback) { ... }
}

Я бы лично использовал схему мангуста напрямую.

Mongoose использует объект Schema для выполнения запросов для этой конкретной модели, но если вы действительно хотите создавать и сохранять новые объекты этого типа схемы, вы хотите создать новый объект.

// Assume you've exposed the mongoose Poll schema directly
var Poll = require('./models').Poll;

// Create a new instance
var instance = new Poll();

// Valid
instance.save();

// Not valid
instance.find(function(err, docs){});

// Valid
Poll.find(function(err, docs){});

// Not valid
Poll.save();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...