无法读取 JSON 属性。属性未定义

时间:2021-03-13 21:19:14

标签: javascript node.js json mongodb crud

我的 MongoDB 中有这个文档

{
    _id: 603e59811a640a0d1097bc35,
    firstName: 'ABC',
    lastName: 'XYZ',
    address: 'Mars',
    age: 20,
    mobile: 9922334455,
    email: 'abc@gmail.com',
    password: 'pass',
    type: 'citizen',
    __v: 0
}

下面是我用来获取它的代码:

router.post('/login', (req, res) => {
    const user = new User({
        userName: req.body.userName,
        password: req.body.password,
    })

    User.findOne(
        {
            email: user.userName,
            password: user.password,
        },
        (err, data) => {
            console.log(data)
        }
    )
})

在控制台中,我得到的输出为:

{
  _id: 603e59811a640a0d1097bc35,
  firstName: 'ABC',
  lastName: 'XYZ',
  address: 'Mars',
  age: 20,
  mobile: 9922334455,
  email: 'abc@gmail.com',
  password: 'pass',
  type: 'citizen',
  __v: 0
}

现在,当我尝试访问 console.log(data.firstName) 之类的数据时,它显示我为 undefined。但是,如果我执行 console.log(data._id) 这是第一个属性的键,它会给出正确的值 603e59811a640a0d1097bc35

更新

我尝试调试并发现: enter image description here

result 的数据类型是 model。如果我使用 ${result._doc.firstName},它会给我名字。但这是访问属性的正确方法吗?

2 个答案:

答案 0 :(得分:0)

也许您应该对集合使用 File "/usr/local/lib/python3.9/site-packages/django/conf/__init__.py", line 170, in __init__ mod = importlib.import_module(self.SETTINGS_MODULE) File "/usr/local/Cellar/python@3.9/3.9.1_6/Frameworks/Python.framework/Versions/3.9/lib/python3.9/importlib/__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1030, in _gcd_import File "<frozen importlib._bootstrap>", line 1007, in _find_and_load File "<frozen importlib._bootstrap>", line 972, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed File "<frozen importlib._bootstrap>", line 1030, in _gcd_import File "<frozen importlib._bootstrap>", line 1007, in _find_and_load File "<frozen importlib._bootstrap>", line 984, in _find_and_load_unlocked ModuleNotFoundError: No module named 'project-x' .then() 方法,因为它们返回一个 promise。

你的例子是:

.catch()

您可以使用 await User.findOne({ email: user.userName, password: user.password }) .then(result => { if (result) { console.log(`Successfully found document: ${result}.`); } else { console.log("No document matches the provided query."); } return result; }) .catch(err => console.error(`Failed to find document: ${err}`)); 中的第二个参数来指定要包含或排除的任何字段:.findOne()

有关此方法的更多信息: https://docs.mongodb.com/realm/mongodb/actions/collection.findOne/

答案 1 :(得分:0)

好的。解决了。我在响应数据上使用了 .toObject(),它将 modeldocument 对象转换为平面 JS 对象

User.findOne({}, (err, data) => {
        const obj = data.toObject()
        console.log(objectt.firstName) // Logs 'ABC'
    })

解决方案来源:How do you turn a Mongoose document into a plain object?