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
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
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. –
Copie possible de [(noeud: 3341) DeprecationWarning: Mongoose: mpromise] (http: // stackoverflow.com/questions/38138445/node3341-deprecationwarning-mongoose-mpromise) – Matt