簡體   English   中英

從對象返回未定義

[英]Undefined returned from object

在下面的代碼中,當我嘗試控制台記錄數據對象時,它將返回正確的用戶名和密碼,如下所示。

[ { _id: 5b7d6366db5064296cbeb79c,
    username: 'ajith',
    password: 'sdf2343@3e!',
    __v: 0 } ]

但是data.username的控制台日志返回未定義。 為什么會這樣呢? 為什么它不返回值?

var express = require('express');
var app = express();
var mongoose = require('mongoose');
var bodyParser = require('body-parser');

app.use(bodyParser.urlencoded({extended:true}));

mongoose.connect
("mongodb://<user>:<pass>@ds129762.mlab.com:29762/<dbnmae>")

var userSchema = new mongoose.Schema({
     username : String,
     password : String
});

var User = mongoose.model("User",userSchema);

app.get("/",function(req,res){
   User.find({"username": "ajith"},function(err,data){
      if(err){
         console.log(err);
      }else{
        console.log(data);
        console.log(data.password+" "+data._id);
      }
    });
});


app.listen(3000,function(){
    console.log("server started and listening at the port 3000");
});

您必須使用data[0].username因為data是一個包含單個值的數組。

User.find()將返回一個數組結果。 因此,您需要使用findOne()查詢。

User.findOne({"username": "ajith"},function(err,data){
   if(err){
       console.log(err);
   }else{
     console.log(data);
     console.log(data.password+" "+data._id);
   }
});

如果您對所有文檔都具有唯一的username屬性,則始終建議對單獨的query組合使用findOne()查詢,而不要使用find()來返回數組,因為您希望從貓鼬查詢中獲得單個文檔。 當您為相同的代碼編寫測試用例時,這也很有用,因為您可以聲明一個對象響應而不是數組響應。

它不返回任何內容,因為data是一個數組。 如果只想訪問該數組的第一個元素,請使用

console.log(data[0].password+" "+data[0]._id);

或者,如果要查看所有元素,請使用循環:

data.forEach(d => console.log(d.password+" "+d._id);

如果您只希望從MongoDB返回一個文檔,請使用Model#findOne

User.findOne({
  "username": "ajith"
}, function(err, user) {
  if (err) {
    console.log(err);
  } else {
    console.log(user);
    console.log(user.password + " " + user._id);
  }
});

當您沒有為輸出定義專用類型,而是對象,數組等(通常是沒有字段的根對象)時,通常會發生這種情況。 因此,在您的情況下,它將返回一個對象本身,然后向您顯示內部內容,但是您無法調用其字段,因為您的應用程序對它們一無所知。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM