web-dev-qa-db-fra.com

Mongoose Model.find n'est pas une fonction?

J'ai passé des heures à essayer de comprendre cela. J'ajoute un nouveau modèle à mon application, mais cela échoue avec "TypeError: List.find n'est pas une fonction". J'ai un autre modèle, Items, qui est configuré de la même manière et qui fonctionne bien. Les choses semblent échouer dans la route, mais cela fonctionne si je le raccorde au modèle Item. Est-ce que je déclare le schéma de manière incorrecte? Dois-je initier le modèle en Mongo ou quelque chose?

modèle

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var listSchema = new Schema({
    name: { type: String, default: datestring + " List" }
});

mongoose.exports = mongoose.model('List', listSchema);

route

app.get('/lists', function (req, res, err) {
    List.find(function (err, docs){ //THIS IS WHAT'S FAILING
        res.json(docs);
    });
});

manette

angular.module('pickUp').controller('ListsCtrl', ['$scope', '$http', 'ngDialog', 'lists',

        function($scope, $http, ngDialog, lists) {

        $scope.lists = lists.lists;

    }]);

usine

angular.module('pickUp').factory('lists', ['$http',
    function($http){

        var lists = {
            lists: []
        };

        lists.getAll = function(){
            console.log("trying. . .");
            $http.get('/lists').success(function(res){
                angular.copy(res, lists.lists);
            });
        };

        return lists;
}]);

config

$stateProvider
.state('/', {
    url: '/',
    templateUrl: 'views/lists.html',
    controller: 'ListsCtrl',
    resolve: {
        listPromise: ['lists', function (lists){
            return lists.getAll();
        }]
12
dumbname92

L'exportation de votre module est incorrecte

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var listSchema = new Schema({
    name: { type: String, default: datestring + " List" }
});

**mongoose.exports = mongoose.model('List', listSchema);** <!-- this is wrong -->

cA devrait etre

**module.exports = mongoose.model('List', listSchema)**
28
AfDev

j'ai fait face à ce problème. pour résoudre cela, vous devez comprendre une logique . vous devez appeler .find comme une promesse de modéliser qui est importé du fichier de modèles.

exemple:

const member = require('..// path to model')

//model initiation
const Member = new member();

exports.searchMembers = function (req,res) {


Member.find({},(err,docs)=>{
    res.status(200).json(docs)
})

}

ce code ne fonctionne pas parce que j'ai appelé find() au schéma initié 

code qui fonctionne:

exports.searchMembers = function (req,res) {


member.find({},(err,docs)=>{
    res.status(200).json(docs)
})

}

ici j’ai appelé .find() directement au modèle importé 

3
user8219568

Pour importer une instance de modèle et une méthode d'appel, par exemple 

modelfile.js

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const NotificationSchema = new Schema({
    count: Number,
    color: String,
    icon: String,
    name: String,
    date: {type: Date, default: Date.now },
    read: Boolean
});

module.exports = mongoose.model('notifications', NotificationSchema);

queryfile.js

const Notification = require('./models/model-notifications');

function totalInsert(online) {
  let query = { name: 'viewed count' };
  Notification.find(query,(err,result)=>{
    if(!err){
      totalCount.count = online + result.length;
      totalCount.save((err,result)=>{
        if(!err){
          io.emit('total visitor', totalCount);
        }
      });
    }
  });
}
0
KARTHIKEYAN.A