Nano Hash - криптовалюты, майнинг, программирование

MissingSchemaError: схема не зарегистрирована для модели

У меня типичный проект с Node.js - Express 3 - MongoDB

Я пытаюсь сделать запрос к моей модели «Tweet» в моем /routes/index.js, и когда я запускаю мое приложение, происходит сбой

24 Aug 11:35:07 - [nodemon] starting `node app.js`

/Applications/XAMPP/xamppfiles/htdocs/ocesa/fanocesa/node_modules/mongoose/lib/index.js:286
  throw new mongoose.Error.MissingSchemaError(name);
        ^
MissingSchemaError: Schema hasn't been registered for model "Teewt".
Use mongoose.model(name, schema)
at Mongoose.model (/Applications/XAMPP/xamppfiles/htdocs/ocesa/fanocesa/node_modules/mongoose/lib/index.js:286:13)
at Object.<anonymous> (/Applications/XAMPP/xamppfiles/htdocs/ocesa/fanocesa/routes/index.js:6:33)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at Object.<anonymous> (/Applications/XAMPP/xamppfiles/htdocs/ocesa/fanocesa/app.js:7:14)
at Module._compile (module.js:456:26)
24 Aug 11:35:07 - [nodemon] app crashed - waiting for file changes before starting...

Это часть моего app.js

var mongoose = require('mongoose');

mongoose.connect('mongodb://localhost/fanOcesa');
var Schema = mongoose.Schema;
var ObjectID = Schema.ObjectID;

var Teewt = new Schema({
    cuerpo: String
});

var Teewt = mongoose.model('Teewt', Teewt);

var app = express();

app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

app.get('/', routes.index);
app.get('/users', user.list);

И это часть моего index.js

var Teewt = require('mongoose').model('Teewt');

Teewt.find({}, function(err, docs){
    console.log('docs');
    console.log(docs);
});

exports.index = function(req, res){
    res.render('index', { 
        docs: docs
    });
};

какой будет правильный способ выполнить этот запрос?


  • Вы не показываете, куда вы вызываете require, чтобы перевести index.js в app.js, но если это до того, как вы зарегистрируете схему с вызовом mongoose.model, тогда это ваша проблема. 24.08.2013
  • Файл / routes / index.js экспресс вызывает автоматически, если я не ошибаюсь, находится в этой строке app.get ('/', routes.index); То есть после регистрации схемы, как вы можете видеть в коде app.js 24.08.2013
  • Он не вызывается автоматически, это строка в сгенерированном коде app.js: var routes = require('./routes'); 24.08.2013
  • Thast It, спасибо JohnnyHK +1 25.08.2013

Ответы:


1

Файл index.js выполняется там, где ваш app.js файл вызывает:

var routes = require('./routes');

Поэтому убедитесь, что он вызывается после ваших вызовов для регистрации схемы 'Teewt' как модели мангуста в app.js.

24.08.2013
  • Как реализовать вашу концепцию для динамически создаваемой модели схемы? 03.06.2020

  • 2

    Назовите свою схему и модель по-другому. Повторное объявление Teewt - это «плохая часть» javascript, а также ошибка в любом языке программирования. Просто вызовите схему TeewtSchema и модель Teewt (поскольку схема обычно используется только в 1 файле в приложении, но модель может использоваться широко).

    24.08.2013
  • Вы правы, это плохая практика и изменить имя переменной, но не решает ошибку index.js, по-видимому, сначала запускается, что регистрирует схему 24.08.2013
  • Да, действительно, комментарий JohnnyHK, вероятно, является вашей основной причиной. 24.08.2013
  • Также непонятно, понимаете ли вы его комментарий. Найдите строку в app.js, которая делает var routes = require('routes');, и переместите ее ниже в файле, чтобы она появлялась ПОСЛЕ конфигурации вашей модели мангуста. 24.08.2013

  • 3

    Я тоже получил эту ошибку. Долго был сбит с толку, следуя этой и подобным темам за помощью, пытаясь отладить. В конечном итоге проблема оказалась из-за версии мангуста в моем случае. Я пытался использовать mongoose-fixture для засева некоторых данных по умолчанию для начала в mongo.

    Попробуйте следующее: удалите node_modules каталог вашего проекта, запустите npm cache clean, а затем npm install. Если даже это не помогает, попробуйте сравнить версии mongoose / mongoose-fixture между проблемным приложением и тем, которое работает, и попробуйте изменить версию в своем package.json и повторить вышеуказанные шаги. Это сработало для меня.

    16.12.2014

    4

    другими словами, эта строка (из app.js):

    var Teewt = mongoose.model('Teewt', Teewt);
    

    должен вызываться после регистрации твита в этой строке (в index.js):

    var Teewt = require('mongoose').model('Teewt');
    
    25.06.2014
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..