У меня проблема с определением «задачи» в mongoDB из моего интерфейса angular.
Этот вопрос наиболее похож на мой вопрос, но здесь он просто говорит req.body.id
и на самом деле не объясняет, как они это получили.
Этот вопрос касается того, что я пытаюсь сделать: обновить один документ в коллекции одним щелчком мыши. То, что он делает во внешнем интерфейсе, не важно. Я просто хочу изменить текст состояния задачи с "Active"
на "Completed"
onclick.
Сначала я создаю задачу и вставляю ее в свою коллекцию базы данных с таким кодом:
createTask(): void {
const status = "Active";
const taskTree: Task = {
_id: this._id,
author: this.username,
createdBy: this.department,
intendedFor: this.taskFormGroup.value.taskDepartment,
taskName: this.taskFormGroup.value.taskName,
taskDescription: this.taskFormGroup.value.taskDescription,
expectedDuration: this.taskFormGroup.value.expectedDuration,
status: status
};
this.http.post("/api/tasks", taskTree).subscribe(res => {
this.taskData = res;
});
}
Когда я делаю этот пост в бэкэнде, _id волшебным образом заполняется! Я просто не уверен, как я могу передать идентификатор запросу put в nodejs router.put('/:id')
, когда я выталкиваю его из внешнего интерфейса следующим образом:
completeTask(): void {
const status = "Completed";
const taskTree: Task = {
_id: this._id,
author: this.username,
createdBy: this.department,
intendedFor: this.taskFormGroup.value.taskDepartment,
taskName: this.taskFormGroup.value.taskName,
taskDescription: this.taskFormGroup.value.taskDescription,
expectedDuration: this.taskFormGroup.value.expectedDuration,
status: status
};
console.log(taskTree);
this.http.put("/api/tasks/" + taskTree._id, taskTree).subscribe(res => {
this.taskData = res;
console.log(res);
});
}
В шаблоне у меня есть заполненная форма и данные сразу же выводятся на «карточку» задачи на той же странице.
Когда я отправляю запрос на поставку из angular, я получаю ответ в бэкэнде, просто отлично от ответа Я запрашиваю в task-routes.js
:
router.put("/:id", (req, res, next) => {
const taskData = req.body;
console.log(taskData);
const task = new Task({
taskId: taskData._id,
author: taskData.author,
createdBy: taskData.createdBy,
intendedFor: taskData.intendedFor,
taskName: taskData.taskName,
taskDescription: taskData.taskDescription,
expectedDuration: taskData.expectedDuration,
status: taskData.status
})
Task.updateOne(req.params.id, {
$set: task.status
},
{
new: true
},
function(err, updatedTask) {
if (err) throw err;
console.log(updatedTask);
}
)
});
Общий ответ, который я получаю для обновленной информации:
{
author: 'there's a name here',
createdBy: 'management',
intendedFor: null,
taskName: null,
taskDescription: null,
expectedDuration: null,
status: 'Completed'
}
Теперь я знаю, _id автоматически создается в базе данных, поэтому здесь, когда Я нажимаю «создать задачу», и она выводится на «карточку», в журнале консоли task
, после того как я save()
отправил ее по запросу, появляется 1032 *. Это все прекрасно, но мне нужно отправить уникальный идентификатор из интерфейса Задачи внешнего интерфейса, поэтому, когда я отправляю запрос 'put', nodejs получает тот же идентификатор, что и 'post'ed.
I Я совершенно сбит с толку.