#javascript #node.js #angular #express #mongoose
Вопрос:
Я пытаюсь создать доску заданий с задачами, которые ежемесячно обновляются для моих коллег. Идея состоит в том, что есть одна таблица со всеми назначениями и другая таблица, в которой есть те же назначения, но с дополнительным полем даты. Предполагается, что программа берет все задачи, которые не отключены, и дублирует их в отдельную таблицу, и именно там клиент получает данные для заполнения таблицы. Каждая задача также имеет уникальное значение идентификатора, что в основном позволяет мне находить ее в двух отдельных таблицах. Вот тут-то у меня и возникли проблемы.
На стороне клиента у меня есть выпадающее меню со статусами («Отключено», «Открыто», «Завершено» и т. Д.), И при изменении значения выпадающего списка предполагается обновить базу данных. Но всякий раз, когда я меняю статус, это заканчивается перезаписыванием другой совершенно несвязанной задачи, даже когда я использую уникальные идентификаторы для запроса базы данных. Прежде чем я войду в код, некоторые слова могут показаться «странными», потому что английский-мой второй язык, и есть некоторые слова на моем родном языке, которые я не знал, как перевести, поэтому я просто написал их так, как мы их произносим, просто по-английски.
Вот как выглядит выпадающий список:
<select class="custom-select" id="statusSelect" (change)="changeStatus($event, task._id, task.customername, task.provname, task.description, task.date, task.status, task.assignmentID)">
<option selected disabled>. . .</option>
<option value="Open">Open</option>
<option value="Complete">Complete</option>
<option value="Disabled">Disabled</option>
</select>
Данные передаются здесь:
changeStatus(event, userTaskID, userCustomerName, userProvname, userDescription, userDate, userStatus, userAssignmentID) {
let valueToChange = event.target.value;
let taskToSearch = {
taskID: userTaskID,
customername: userCustomerName,
provname: userProvname,
description: userDescription,
date: userDate,
status: userStatus,
assignmentID: userAssignmentID,
statusToChange: valueToChange
}
console.log("Task to search from component.ts");
console.log(taskToSearch)
this.dbService.changeTaskStatus(taskToSearch).subscribe(data => {
this.allTasks = data;
console.log(data);
});
}
Функция обслуживания:
changeTaskStatus(taskToChange):Observable<any>
{
console.log("Task to change from service");
console.log(taskToChange)
return this.http.post("http://localhost:3000/changestatus", taskToChange, httpOptions);
}
My index.js file:
router.post('/changestatus', async function(req, res, next) {
let result = await dbModule.changeTaskStatus(req.body);
res.json(result);
});
My dbModule.js:
changeTaskStatus: async (objectFromUser) => {
if (objectFromUser.statusToChange == "Complete") {
console.log("Complete!");
return Task.find({});
}
else
{
console.log(objectFromUser);
console.log(objectFromUser);
assignmentToUpdate = new Assignment();
assignmentToUpdate = Assignment.find({
assignmentID: objectFromUser.assignmentID
});
console.log("Assignment found: *******************")
console.log(assignmentToUpdate);
assignmentToUpdate.status = objectFromUser.statusToChange;
console.log("Updated assignment");
console.log(assignmentToUpdate);
await Assignment.findOneAndUpdate({
customername: objectFromUser.customername,
provname: objectFromUser.provname,
description: objectFromUser.description,
status: objectFromUser.statusToChange,
assignmentID: objectFromUser.assignmentID
});
await Task.findOneAndUpdate({
customername: objectFromUser.customername,
provname: objectFromUser.provname,
description: objectFromUser.description,
status: objectFromUser.statusToChange,
date: objectFromUser.date,
assignmentID: objectFromUser.assignmentID
});
return Task.find({});
}
}
Как вы можете видеть, я попытался войти в консоль, чтобы убедиться, что передаю правильные данные, что я и делаю. Я пытался исправить это чуть больше месяца назад и начинаю по-настоящему злиться на себя. Если у кого-нибудь есть хоть малейшее представление о том, что я делаю не так, и он может объяснить мне это, я был бы очень признателен. Спасибо.