【问题标题】:Why do i get undefined when console.log(object.property) of mongoose为什么当mongoose的console.log(object.property)时我得到未定义
【发布时间】:2021-08-08 21:02:10
【问题描述】:

为什么我在console.log(object.property) 时得到undefined

这是我的代码

const adminusersSchema = new mongoose.Schema({});
const adminusers = mongoose.model('adminusers', adminusersSchema, 'adminusers');

app.post('/login', async (req, res)=>{
    let result = await adminusers.find();
    console.log(result[0]);
    console.log(result[0].mail);
    res.send();
});

这是控制台的输出:

Connecting to DB
Connected to DB
Server on port: 3000
{
  _id: 6110430c94569f3dfc90146d,
  mail: 'admin@user.com',
  password: 'admin123'
}
undefined

如果我尝试 JSON.parse 我得到一个错误:

app.post('/login', async (req, res)=>{
    let result = await adminusers.find();
    console.log(result[0]);
    console.log(JSON.parse(result[0]).mail);
    res.send();
});

SyntaxError: 位置 4 处 JSON 中的意外标记 _

我看不出我的代码有什么问题,因为如果我这样做:

app.post('/login', async (req, res)=>{

    let object = {
        'test': 'approved',
        'problem': 'solved'
    }

    console.log(object)
    console.log(object.test);

    // let result = await adminusers.find();
    // console.log(result[0]);
    // console.log(JSON.parse(result[0]).mail);
    // res.send();
});

我的输出是:

Connecting to DB
Connected to DB
Server on port: 3000
{ test: 'approved', problem: 'solved' }
approved

【问题讨论】:

  • 您确定对象键和您的 JS 代码使用的是常规字符串 mail,而不是带有奇怪的不可见字符的东西吗?出于这个原因,也始终将控制台输出包含在代码块中而不是图像中。 如果可以避免,图像就是不好的。
  • 尝试解析为JSON.parse(result[0]).mail;,看到输出,好像是解析问题。
  • 试试 let result = await adminusers.find()/findOne().lean()

标签: node.js mongoose javascript-objects


【解决方案1】:

我会尝试将 mongoose 文档转换为常规 javascript 对象,您可以使用 .toObject() 或者如果您打算从端点将其作为 JSON 返回,那么也许使用 .toJSON() 代替。 https://mongoosejs.com/docs/guide.html#toObject

const adminusersSchema = new mongoose.Schema({});
const adminusers = mongoose.model('adminusers', adminusersSchema, 'adminusers');

app.post('/login', async (req, res)=>{
    const result = await adminusers.find();
    const objectResult = result.toObject();
    console.log(objectResult[0]);
    console.log(objectResult[0].mail);
    res.send();
});

cmets 中建议的另一个选项是在查询中使用lean() 函数,如Documents returned from queries with the lean option enabled are plain javascript objects, not Mongoose Documents - https://mongoosejs.com/docs/api.html#query_Query-lean

const adminusersSchema = new mongoose.Schema({});
const adminusers = mongoose.model('adminusers', adminusersSchema, 'adminusers');

app.post('/login', async (req, res)=>{
    let result = await adminusers.find().lean();
    console.log(result[0]);
    console.log(result[0].mail);
    res.send();
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-31
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 2021-03-24
    • 2015-03-23
    • 2012-02-05
    • 1970-01-01
    相关资源
    最近更新 更多