javascript - 无法从 Web 应用程序的 MongoDB 数据库获取数据

标签 javascript node.js mongodb mongoose database

我刚开始使用 MongoDB。目前,我正在制作一个需要一些数据存储的网络应用程序。我在 Node.js 上建立了一个在 localhost:3000 上运行的 HTTP 服务器。我还使用 Vagrant 和 VirtualBox 构建了一个虚拟开发环境。我正在从 PuTTy 访问 Mongo shell(如果相关的话)。在合并 MongoDB 之前,它工作正常,因为我将数据存储在 Node.js 程序内存中。

此网络应用程序是一个在线待办事项列表。我遇到的第一个错误是 get 路由。我插入到 Mongo 数据库中的“待办事项”列表不会出现在本地主机的站点上。它似乎没有从数据库中获取数据。我遇到的第二个错误是 post 路由。当我通过本地主机的用户界面插入“待办事项”并刷新页面时,本地主机上的待办事项列表会更新为该特定待办事项(但不会更新我插入数据库的待办事项)。但是,它似乎没有将它添加到数据库中,而且我仍然在控制台上收到此错误:

vagrant@precise32:~/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 

我不确定为什么会出现该错误,因为我似乎没有使用任何 promise 。

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);
    })
});

蒙戈外壳

> 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" ] }

编辑: 我发现这只是命名错误。

我也发现了

mongoose.Promise = require("bluebird");

解决了 promise 错误的问题。请记住先安装模块:

npm install --save bluebird

最佳答案

我发现了问题所在。 GET 和 POST 路由的命名 错误。应该是:

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

还有:

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

我应该使用 todos 集合而不是 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" ] }

关于javascript - 无法从 Web 应用程序的 MongoDB 数据库获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42498608/

相关文章:

node.js - 从 Strongloop 环回下载文件

mongodb - 如何执行查找仅获取第一个元素

mongodb - Golang 从结构数组中选择字段

javascript - 错误类型错误 : Cannot read property 'toLowerCase' of undefined. Ionic 3

javascript - 从 PHP 获取 JSON 并以 HTML 显示

javascript - ReactJS 中的 PayFast 支付集成

c# - 不支持 MongoDB 投影 toListAsync() 方法

javascript - 如何打开 jquery Jstree 中的所有节点?

javascript - 为要使用的 jquery 函数添加多个参数的正确方法

node.js - 从 nodejs 请求到 s3 的流式响应