Здесь показывается ошибка TypeError: User.save is not a function
const express = require("express");
require("dotenv").config("../.env");
const User = require("../models/User");
const auth = require("../middleware/auth");
const ObjectId = require("mongoose").Types.ObjectId;
const HttpStatus = require("http-status");
router.post("/admin/update/:userid/:issueid", async (req, res) => {
var status = req.body.status;
var userId = req.params.userid;
var issueId = req.params.issueid;
if (isNull(issueId & userId) || !ObjectId.isValid(issueId & userId)) {
return ReE(
res,
{ message: "Please provide a valid issueId and userID" },
HttpStatus.BAD_REQUEST
);
}
var found = User.find({
$and: [{ "User._id": userId }, { "User.issues._id": issueId }]
});
if (!found) {
return ReE(res, "User or Issue not found", 400);
}
found.status = status;
let updatedUser;
[err, updatedUser] = await to(user.save());
if (err) {
return ReE(res, err, 500);
}
ReS(res, "Issue Updated", HttpStatus.OK);
});
Всего 2 ответа
TypeError: User.save не является функцией
Вы не написали ни одной функции как User.save и пытались вызвать эту функцию.
[err, updatedUser] = await to(user.save());
Это причина ошибки
Вам нужно использовать found.save()
вместо user.save()
.
Также этот тип обновления может быть выполнен за один раз с использованием позиционного оператора mongodb $ .
router.post("/admin/update/:userid/:issueid", async (req, res) => {
var status = req.body.status;
var userId = req.params.userid;
var issueId = req.params.issueid;
if (isNull(issueId & userId) || !ObjectId.isValid(issueId & userId)) {
return ReE(
res,
{ message: "Please provide a valid issueId and userID" },
HttpStatus.BAD_REQUEST
);
}
let updatedUser;
[err, updatedUser] = await to(
User.findByIdAndUpdate(
userId,
{ $inc: { "issues.$[inner].status": status } },
{ arrayFilters: [{ "inner._id": issueId }], new: true }
)
);
if (err) {
return ReE(res, err, 500);
}
if (!updatedUser) {
return ReE(res, "User or Issue not found", 400);
}
ReS(res, "Issue Updated", HttpStatus.OK);
});