【问题标题】:Node.js, Express, Mongodb using monk database emptyNode.js, Express, Mongodb 使用和尚数据库为空
【发布时间】:2015-07-24 01:22:48
【问题描述】:

我在学习 node.js 中的教程时遇到问题,使用 Mongodb 数据库和 Mongo。当我在 mongo 控制台中运行我的数据库命令时,我可以看到我的数据库 nodetest1 有 3 个条目,但是当我这样做时它什么也不返回。

router.get('/', function(req, res, next) {
    var db = req.db;
    var collection = db.get('usercollection');
    collection.find({},{},function(e,docs){
        res.send(docs);
    });
});

当我使用 find 方法时,这是来自 mongo 控制台的打印。

> db.usercollection.find().pretty()
{
        "_id" : ObjectId("55b17a551efb190c06c38d31"),
        "username" : "testuser1",
        "email" : "testuser1@testdomain.com"
}
{
        "_id" : ObjectId("55b17a5f1efb190c06c38d32"),
        "username" : "testuser2",
        "email" : "testuser2@testdomain.com"
}
{
        "_id" : ObjectId("55b17a5f1efb190c06c38d33"),
        "username" : "testuser3",
        "email" : "testuser3@testdomain.com"
}

如果您需要更多信息,我会提供给您。我希望你能帮助我,我在这个问题上停留了 45 分钟试图找到解决方案。

更新: 这就是mongod的启动方式

mongod --dbpath "C:\Users\Victor\OneDrive\Programming\NodeJS\DatabaseSetup\data"

我与数据库的连接是在 app.js 中:

var mongo = require('mongodb');
var monk = require('monk');
var db = monk('localhost:27017/DatabaseSetup');

app.use(function(req,res,next){
  req.db = db;
  next();
});

当我在 localhost:3000/userlist 上运行我的程序时,我没有从数据库中获取任何数据,但控制台会这样写:

2015-07-24T03:13:28.127+0200 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:57961 #151 (6 connections now open)

【问题讨论】:

  • 你是如何连接到数据库的?你在var db = require('monk')('localhost/test') 的电话是什么?您连接到的数据库与使用 shell 的数据库相同吗?
  • 我没有看到var monk = require('monk') 命令
  • 哇哦。你是如何从外壳连接的?你只是输入mongo 就这样了吗?
  • 你有router.get('/',...,你正在点击localhost:3000/userlist。我希望你已经为/userlist定义了一条路由

标签: json node.js mongodb express monk


【解决方案1】:

根据您上面列出的信息,我愿意冒险数据库连接字符串不会按照您认为的方式工作。

你说你自己正在像这样启动mongod 服务器的一个实例:

mongod --dbpath "C:\Users\Victor\OneDrive\Programming\NodeJS\DatabaseSetup\data"

然后你可以连接到shell,即:

mongo

一切都很好。

这里的问题是,默认情况下您实际连接的“数据库”并且没有其他声明,称为“测试”,而不是作为存储物理数据文件的路径的名称。

因此将僧侣连接到该数据然后执行:

var db = require('monk')('localhost/test');

它连接到与数据存储位置相同的数据库名称。

如果您想创建不同的数据库名称,请执行以下操作:

mongo
> use DatabaseSetup

或者只是从命令行:

mongo DatabaseSetup

在任何一种情况下,这都会切换包含的默认数据库。然后您可以在该命名空间中创建您的数据。

但否则您的数据可能驻留在“测试”中,所以这就是您应该使用的。


只需在此处重新阅读您的第一句话。也许数据库容器名称是“nodetest1”,因为你说的是​​,因此:

var db = require('monk')('localhost/nodetest1');

【讨论】:

  • 应该指出,始终检查错误是个好主意。比如初始化monk时,做const db = require('monk')('localhost:27017/nodetest1', function(err) { if(err) console.log(err.toString()); });
猜你喜欢
  • 1970-01-01
  • 2016-10-26
  • 2013-12-30
  • 2016-04-07
  • 2014-03-20
  • 2021-08-27
  • 2020-04-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多