2017-05-09 7 views
0

In meiner app, ich zurückkehren Versprechen mit meinem Mungo Modell:Node.js Mungo .findOne ist keine Funktion

var roomModel = require('../../../models/room').roomModel; 

roomModel.findOne({ name: req.body.roomName }) 
    .then(
     (room) => { 
      return new Promise(function(resolve, reject) { 
       //if no room present, create one, if present, check password 
       if (room) { 

        if (room.password === req.body.roomPassword) { 
         return resolve(room); 
        } else { 
         return reject({ 
          code: 401, 
          message: 'Room password not correct' 
         }); 
        } 
       } else { 
        // create new room with given data 
        var newRoom = roomModel({}); 
        newRoom.name = req.body.roomName; 
        newRoom.password = req.body.roomPassword; 
        //newRoom.users = []; 
        newRoom.users[0] = { 
         name: req.body.userName 
        }; 

        newRoom.save() 
         .then((data) => { 
          console.log(data); 
          if (!data) { 
           return reject({ 
            code: 500, 
            message: 'Error when saving room' 
           }); 
          } else { 
           return resolve(newRoom); 
          } 
         }); 
       } 
      }); 
     } 
    ) 
    .then((room) => { 
     room.findOne({ 'users.name': req.body.userName }) 
      .then((user) => { 
       console.log(user); 
      }); 
    }) 

room.js Modell:

'use strict'; 
var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 
var userSchema = require('./user').userSchema; 

var room = new Schema({ 
    name: String, 
    password: String, 
    users: [userSchema] 
}); 

module.exports.roomSchema = room; 
module.exports.roomModel = mongoose.model('room', room); 

Benutzer. js Modell:

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

var user = new Schema({ 
    name: String 
}); 

module.exports.userSchema = user; 
module.exports.userModel = mongoose.model('user', user); 

aber wenn ich versuche anzurufen .findOne() Funktion auf diesem zurück Modell, bekomme ich folgende Fehlermeldung:

TypeError: room.findOne is not a function 

ist Modell in dem Versprechen besteht kein Modell in next .then() Aussage?

+1

Können Sie uns zeigen, was Sie aus Ihrer ' /models/room.js' Datei exportieren? – Paul

+0

Aktualisiert - Es scheint nicht das Modell selbst ist ein Problem, weil in der ersten .then Anweisung alle Operation auf dem Modell funktionieren, nur wenn ich das Modell zu lösen, kann ich nicht Mungo Methoden auf diese verwenden –

+0

Können Sie 'console.log (newRoom) 'und die Ergebnisse veröffentlichen? Auch 'console.log (Daten)' bitte? –

Antwort

1

Nun, wie die Dokumente sagen "queries are not promises".

Es gibt sogar ein findOne() Beispiel in dort ...

Ändern Sie Ihren Code

roomModel.findOne({ name: req.body.roomName }).exec().then(/* your stuff */) 

und Sie können mehr Glück haben.

+0

Das ist nicht der Fall - der Fall ist, dass, wenn ich Versprechen zurückschicke (nicht von .then, aber von neuem Versprechen behandelt), in dem ich mein Modell weitergeben, kann ich es nicht als ein Modell im nächsten Versprechen verwenden. .exec() hat in meinem Fall nicht geholfen –

0

Sie verpasst exec() Methode in Ihrer Abfrage, versuchen zu verwenden und gelöst werden.

roomModel.find({ name: req.body.roomName }).exec().then(/* your stuff */) 
0

gefunden Problem von mir: Ich vorging nicht das Modell, auf das ich Operationen finden kann, aber Dokument, auf das ich Optionen speichern ausführen kann (nicht finden, da es kein Modell ist).

Verwandte Themen