Узел, читающий строку как объект - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть этот код:

<a class="btn-primary btn" href="/employer/booth/<%= user._id.toString() %>"
        <% console.log(typeof user._id, user._id) %>
   target="_blank">
    Preview your booth
</a>

Результат этого console.log таков: object 5bc9d28270e5375dfbfe17fd

Почему? Почему универсальный _id, созданный с паспортом, рассматривается как объект, если это явно строка?

Я попытался сделать .toString(), но это вызвало еще одну ошибку в моем маршрутизаторе. Вот код:

router.get('/booth/:emp_id', async (req, res, next) => {
    const mongoose = require('mongoose');
    // For reports
    const {emp_id} = req.params;
    console.log('here', emp_id);
    console.log(typeof  emp_id);
    console.log(JSON.stringify(emp_id));
    const eventId = await GeneralInfo.findOne().then(r => r.activeEventId).catch(e => console.log(e));
    const event = await Event.findById(eventId).catch(e => console.log(e));
    Event.updateOne({'attendants.employers.id': mongoose.Types.ObjectId(emp_id)}, {$addToSet: {"attendants.employers.$.boothVisits": req.user._id}}, {$upsert: true}).catch(e => console.log(e));
    var postings = await Posting.find({
        'creatorId': emp_id,
        'visible': true,
        'eventId': eventId,
    }).catch(e => console.log(e));
    const acc = await Account.findById(emp_id);
    // const logo = await functions.downloadFile(req, res);
    const logo = await functions.downloadFile(acc.employer.logo);
    console.log(logo);
    res.render('users/employer/booth', {
        title: 'Employer Booth',
        user: req.user,
        postings: postings,
        employer: acc,
        event: event,
        logo: logo,
    });
});

Если я это сделаю, так что передав строку, я получу следующее:

(node:15508) UnhandledPromiseRejectionWarning: Error: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters
at new ObjectID (/home/alex/Documents/Projects/ontario-job-portal/node_modules/mongodb-core/node_modules/bson/lib/bson/objectid.js:57:11)
at ObjectID [as ObjectId] (/home/alex/Documents/Projects/ontario-job-portal/node_modules/mongodb-core/node_modules/bson/lib/bson/objectid.js:38:43)
at router.get (/home/alex/Documents/Projects/ontario-job-portal/routes/employer.js:68:68)
at <anonymous>

Потому что по какой-то причине req.params.emp_id - это [object Object]. Если я попытаюсь JSON.stringify, я получу "[object Object]", так что это крайне бесполезно.

Вот поле _id от mongoDB

"_id": {
    "$oid": "5bc9d28270e5375dfbfe17fd"
},

Так как я могу передать _id пользователя в виде строки?

1 Ответ

0 голосов
/ 08 ноября 2018

Чтобы получить шестнадцатеричное представление идентификатора, вы можете использовать .valueOf().Больше методов и примеров здесь: https://docs.mongodb.com/manual/reference/method/ObjectId.valueOf/#ObjectId.valueOf

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...