2017-02-28 1 views
1

L'utilisation de MongoDB est nouvelle. Actuellement, je fais une application web qui nécessite un stockage de données. J'ai établi un serveur HTTP sur Node.js qui s'exécute sur localhost: 3000. J'ai également construit un environnement de développement virtuel en utilisant Vagrant et VirtualBox. J'accède au shell Mongo depuis PuTTy (si cela est pertinent). Avant d'incorporer MongoDB, cela fonctionnait bien car je stockais les données dans la mémoire du programme Node.js.Impossible d'obtenir les données de la base de données MongoDB pour l'application Web

Cette application web est une liste de choses à faire en ligne. La première erreur que je reçois est avec le obtenir route. La liste des "choses à faire" que j'ai insérées dans la base de données Mongo n'apparaîtra pas sur le site dans localhost. Il semble ne pas obtenir les données de la base de données. La deuxième erreur que je reçois est avec l'itinéraire post. Lorsque j'insère un "to-do" via l'interface utilisateur à localhost et que j'actualise la page, la liste de tâches sur localhost est mise à jour avec cette tâche particulière (mais pas avec celles que j'ai insérées dans la base de données). Mais, il ne semble pas l'ajouter dans la base de données, et je reçois toujours cette erreur sur la console: semble

[email protected]:~/app$ node server.js 
{ description: 'descTest3', tags: [ 'tagTest3' ] } 
Mongoose: mpromise (mongoose's default promise library) is deprecated, plug in your own promise library instead: http://mongoosejs.com/docs/promises.html 

Je ne sais pas pourquoi je suis cette erreur puisque je ne doit pas être utiliser un promesses.

server.js

var express = require("express"), http = require("http"), app = express(), mongoose = require("mongoose"); 

app.use(express.static(__dirname + "/client")); 

app.use(express.urlencoded()); 

mongoose.connect('mongodb://localhost/WatNext');//connect to the WatNext data store in mongoDB 

var ToDoSchema = mongoose.Schema({ 
    "description": String, 
    "tags": [ String ] //array of Strings 
}); 

var ToDo = mongoose.model("ToDo", ToDoSchema) 

http.createServer(app).listen(3000); 
//get and post routes: 

app.get("/toDos.json", function (req, res) { 
    ToDo.find({}, function (err, toDos) { 
     if (err != null){ 
      console.log(err); 
     } 
     res.json(toDos); 
    }); 
}); 

app.post("/todos", function (req, res) { 
    console.log(req.body); 
    var addedToDo = new ToDo({"description" : req.body.description, "tags" : req.body.tags}); 
    //save function saves object into the database 
    addedToDo.save(function (err, result) { 
     if (err != null){//if there is an error 
      console.log(err); 
      res.send("ERROR SAVING"); 
     } 
     else { 
      ToDo.find({}, function (err, result) { 
       if (err != null){//if there is an error in finding 
        res.send("ERROR FINDING"); 
       } 
       res.json(result); 
      }); 
     } 
    }); 
}); 

app.js

var main = function (toDoObjects) { 
//do stuff with ToDoObjects including outputting the list of ToDos 
}; 
$(document).ready(function() { 
    $.getJSON("toDos.json", function(toDoObjects) { 
     main(toDoObjects); 
    }) 
}); 

shell mongo

> show dbs 
WatNext 0.0625GB 
local 0.03125GB 
> use WatNext 
switched to db WatNext 
> show collections; 
system.indexes 
toDoCollection 
todos 
> db.toDoCollection.find(); 
{ "_id" : ObjectId("58b38dd8fb355f57162d9cf1"), "description" : "Get groceries and eat afterwards", "tags" : [ "shopping", "chores" ] } 
{ "_id" : ObjectId("58b38dd8fb355f57162d9cf2"), "description" : "Make up some new To-Dos", "tags" : [ "writing", "work" ] } 
{ "_id" : ObjectId("58b38dd8fb355f57162d9cf3"), "description" : "Prep for Monday's class", "tags" : [ "work", "teaching" ] } 
{ "_id" : ObjectId("58b38dd8fb355f57162d9cf4"), "description" : "Answer emails", "tags" : [ "work" ] } 
{ "_id" : ObjectId("58b38dd8fb355f57162d9cf5"), "description" : "Take April to the park", "tags" : [ "chores", "pets" ] } 
{ "_id" : ObjectId("58b38dd8fb355f57162d9cf6"), "description" : "Finish writing this book", "tags" : [ "writing", "work" ] } 

EDIT: J'ai découvert que c'était juste une erreur de nommage.

J'ai aussi découvert que

mongoose.Promise = require("bluebird"); 

a résolu le problème avec l'erreur de promesse. N'oubliez pas d'installer le module en premier si:

npm install --save bluebird 
+0

Lorsque vous essayez la/méthode post de l'interface utilisateur , pouvez-vous voir les résultats via la ligne de commande en utilisant db.toDoCollection.find()? – Matt

+0

Lorsque je fais la méthode post de l'interface utilisateur, toDoCollection n'est pas mis à jour. Je tape db.toDoCollection.find(); mais les seules données répertoriées sont celles que j'ai insérées dans la base de données via le shell moi-même. Mais l'interface utilisateur est mise à jour avec les nouvelles données lorsque je me rafraîchis, pour une raison quelconque. –

+0

Copie possible de [(noeud: 3341) DeprecationWarning: Mongoose: mpromise] (http: // stackoverflow.com/questions/38138445/node3341-deprecationwarning-mongoose-mpromise) – Matt

Répondre

1

J'ai trouvé ce qui n'allait pas. Il s'agissait d'une erreur dans nommant pour les routes GET et POST. Il aurait dû être:

app.get("/todos.json", function (req, res) { //get the data from the collection called 'todos' in MongoDB 

ainsi que:

$.getJSON("todos.json", function(toDoObjects) { 

Je l'ai utilisé la collection todos au lieu de toDoCollection:

"description" : "descTest1", "_id" : ObjectId("58b39a1fb1a30305075408fa"), "tags" : [ "tagTest2" ], "__v" : 0 } 
{ "description" : "descTest2", "_id" : ObjectId("58b4c837d47a5604c7c0609a"), "tags" : [ "tagsTest2" ], "__v" : 0 } 
{ "description" : "descTest3", "_id" : ObjectId("58b4ca0491f4c804d200cda9"), "tags" : [ "tagTest3" ], "__v" : 0 } 
{ "description" : "descTest4", "_id" : ObjectId("58b4e636b71d0a05ebb7a71a"), "tags" : [ "tagTest4" ], "__v" : 0 } 
{ "description" : "descTest5", "_id" : ObjectId("58b60211428520053a4714ed"), "tags" : [ "tagTest5" ], "__v" : 0 } 
{ "_id" : ObjectId("58b6037839e65d96e13cf68e"), "description" : "descTestMONGO", "tags" : [ "tagTestMONGO" ] } 
{ "_id" : ObjectId("58b605b339e65d96e13cf690"), "description" : "Take April to the park", "tags" : [ "chores", "pets" ] }