Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Mongoose FindOne方法始终返回';空';_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Node.js Mongoose FindOne方法始终返回';空';

Node.js Mongoose FindOne方法始终返回';空';,node.js,mongodb,express,mongoose,Node.js,Mongodb,Express,Mongoose,我正在尝试使用mongoose使我的express应用程序与MongoDb协同工作 以下是代码(编辑后): 我的问题是在我的收藏中找不到用户。我已经尝试指定一个集合名称,使用多字符串格式(大写或不大写),正如您所看到的,就像其他帖子对同一主题的回答一样 findOne()方法始终通过错误回调,即使文档已正确添加到集合中 如果你们中有人有想法或什么的话 非常感谢 编辑: 根据你的建议,我更新了一些更符合逻辑的代码 在我的MongoLabUsers收藏中,我有一个这样的文档: { "_id"

我正在尝试使用mongoose使我的express应用程序与MongoDb协同工作

以下是代码(编辑后):

我的问题是在我的收藏中找不到用户。我已经尝试指定一个集合名称,使用多字符串格式(大写或不大写),正如您所看到的,就像其他帖子对同一主题的回答一样

findOne()方法始终通过错误回调,即使文档已正确添加到集合中

如果你们中有人有想法或什么的话

非常感谢

编辑:

根据你的建议,我更新了一些更符合逻辑的代码

在我的MongoLab
Users
收藏中,我有一个这样的文档:

{
    "_id": {
        "$oid": "5641e9a1e4b0af6681f0bef1"
    },
    "username": "admin",
    "password": "admin"
}
POST
数据之后,“admin”与用户名完全相同,mongoose查询返回以下内容:

web.1  | admin                // req.body.username
web.1  | Error: null null     // findOne() error callback 

mongoDB操作仅在
/routes/admin.js
中进行,而
moongose.connection
仅在
/index.js
中进行。我对模块概念不太熟悉…

要运行查询,必须先创建一个模型:

var schema = new mongoose.Schema({
username: String,
password: String});
var Users = mongoose.model('Users-CollectionName', schema);

然后根据需要查询数据库。

    Users.findOne({
    username: req.body.username
}, function(err, user) {
    console.log('Error: ' + err, user);
});

要运行查询,您必须首先创建一个模型:

var schema = new mongoose.Schema({
username: String,
password: String});
var Users = mongoose.model('Users-CollectionName', schema);

然后根据需要查询数据库。

    Users.findOne({
    username: req.body.username
}, function(err, user) {
    console.log('Error: ' + err, user);
});

User.find()为您提供了什么(返回所有保存的文档)?您似乎在每次调用应用程序时都添加了用户。这使我认为您的案例实际上是一个失败的测试,而不是一个失败的应用程序。nodejs中的代码是“异步”的,虽然您似乎理解了其中的部分概念,但您似乎没有意识到.save()操作不一定在路由可用之前被调用,并且可能在“测试”中被调用。因此,没有数据。您需要确保数据在要求召回之前已保存。而且您不应该在“POST”请求中检索数据,因为它是用于添加的。您不需要指定mongo集合的名称:
mongoose。model(“User”,UserSchema)
将自动创建一个名为
users
@Blakes Seven的集合,谢谢您的解释!我想知道,即使应用程序每次添加一个用户文档,在5次或6次之后,findOne()是否应该返回一些内容,不是吗?因为集合中存在用户名为“John”的文档。我的主要观点是,除了这里列出的代码之外,显然还有其他一些交互(例如自动测试用例),这可以解释为什么调用POST方法看不到任何数据。在相同的情况下,每次运行时数据似乎都被其他内容删除。因此,这里基本上还有其他代码,您没有告诉我们,这就解释了问题。User.find()为您提供了什么(返回所有保存的文档)?您似乎在每次调用应用程序时都添加了用户。这使我认为您的案例实际上是一个失败的测试,而不是一个失败的应用程序。nodejs中的代码是“异步”的,虽然您似乎理解了其中的部分概念,但您似乎没有意识到.save()操作不一定在路由可用之前被调用,并且可能在“测试”中被调用。因此,没有数据。您需要确保数据在要求召回之前已保存。而且您不应该在“POST”请求中检索数据,因为它是用于添加的。您不需要指定mongo集合的名称:
mongoose。model(“User”,UserSchema)
将自动创建一个名为
users
@Blakes Seven的集合,谢谢您的解释!我想知道,即使应用程序每次添加一个用户文档,在5次或6次之后,findOne()是否应该返回一些内容,不是吗?因为集合中存在用户名为“John”的文档。我的主要观点是,除了这里列出的代码之外,显然还有其他一些交互(例如自动测试用例),这可以解释为什么调用POST方法看不到任何数据。在相同的情况下,每次运行时数据似乎都被其他内容删除。所以这里基本上还有其他代码在工作,你没有告诉我们,这就解释了这个问题。