Я использую express -сессион для передачи переменной с именем _id. Идея состоит в том, чтобы иметь корзину заказов, и если пользователь выбирает второй прием пищи, блюдо сохраняется в массиве, который является частью того же _id (это означает, что вы можете иметь больше блюд в 1 заказе). Проблема, с которой я сталкиваюсь, заключается в том, что если я пытаюсь найти byIdAndUpdate (req.session.id), я получаю сообщение об ошибке: Ошибка: переданный аргумент должен быть одной строкой из 12 байтов или строкой из 24 шестнадцатеричных символов. Но если я изменяю его на строку, это не тот же идентификатор при преобразовании из объекта в строку. Когда я console.log (req.session._id), req.session._id соответствует _id. Мой вопрос заключается в том, как преобразовать объект req.session.id в строку без изменения значения или как реализовать его с помощью mon goose без получения ошибки, написанной выше.
Вот код:
app.post("/menu/order", middlewareObject.isLoggedin, function (req, res) {
const order = new Order({
_id: mongoose.Types.ObjectId(),
user: req.user._id,
order: {
meal: req.body.foodID,
quantity: req.body.quantity
}
})
if (req.session._id != undefined) {
Order.findByIdAndUpdate(JSON.stringify(req.session.id), {
$push: {
order: {
meal: order.meal,
quantity: order.quantity
}
}
}, function (err, updateOrder) {
if (err) {
console.log(err);
} else {
res.redirect("back");
}
})
} else {
Order.create(order, function (err, newOrder) {
if (err) {
console.log(err)
} else {
req.session._id = newOrder._id;
console.log(req.session._id)
res.redirect("back");
}
})
}
});