Почему я получаю неопределенность, когда console.log(object.property) мангуста

avatar
thestuckboy
8 августа 2021 в 21:02
75
1
0

Почему я получаю undefined, когда console.log(object.property)?

Это мой код:

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: Неожиданный токен _ в JSON в позиции 4

Я не понимаю, в чем проблема с моим кодом, потому что если я сделаю:

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
Источник
Kelvin Schoofs
8 августа 2021 в 21:05
0

Вы уверены, что ключ объекта и ваш код JS используют обычную строку mail, а не что-то со странными невидимыми символами? По этой причине также всегда включайте вывод консоли в блок кода, а не в изображение. Изображения плохи, если их можно избежать.

Lalit Fauzdar
8 августа 2021 в 22:03
0

Попробуйте выполнить синтаксический анализ как JSON.parse(result[0]).mail;. Судя по выводу, это похоже на проблему синтаксического анализа.

fractal397
9 августа 2021 в 11:40
0

Попробуйте let result = await adminusers.find()/findOne().lean()

Ответы (1)

avatar
Wodlo
9 августа 2021 в 20:20
0

Я бы попробовал превратить документ мангуста в обычный объект 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();
});

Еще один вариант, предложенный в комментариях, заключается в использовании функции 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();
});