Я работаю над угловым приложением с бэкэндом node.js, где моя архитектура выглядит следующим образом:
front-end => angular.service => бэкэнд узла => mLab DB
В настоящее время я пытаюсь вставить объект в БД при условии, что он еще не существует. Если это уже делает, это должно обновить. Эта функция будет доступна через кнопку с карточек в моем интерфейсе.
, чтобы дать более ясное понимание, вот некоторые из моего кода.
интерфейс: admin-edit-home.component.html
<a mdbBtn class='btn btn-md btn-primary' mdbWavesEffect (click)="addCard()">Add</a>
приведенный выше код является кнопкой, где я могу добавить карту в интерфейс. Приведенный ниже TS показывает, как работает код.
front-end: admin-edit-home.component.ts
addCard() {
this.carousels.push(this.carousels.length);
}
Чтобы дать объяснение TScode, 'carousels' - это массив, который я использую для выполнения цикла * ngFor в моем HTML, где он представляет данные в формате карты. Он объявляется как:
carousels: any = [];
Таким образом, при добавлении длины в массив 'carousels', он представляет пустую карту без собранных данных, но все еще содержит элементы HTML из исходной карты, которая содержит предполагаемое обновлениефункция, которую я хотел бы иметь.
Моя проблема в том, как мне выполнить проверку существования объекта из серверной части и представить результаты обратно во внешний интерфейс? Я пробовал это,
back-end: api.js
router.route('/carousel/update/:id').put(function(req,res) {
var data = req.body;
const myquery = { _id: ObjectId(req.params.id) };
db.collection('home').updateOne(myquery, {
$set: {
"header" : data.header,
"subheader" : data.subheader,
"img" : data.img
}
})
if (myquery === -1) {
arr.push(obj);
} else {
arr[myquery] = obj
}
}
Я знаю, что мой back-end код неправильный и не работает, но я просто хотелчтобы вы, ребята, имели визуализацию того, чего пытается достичь моя логика.
Кроме того, этот серверный код теперь должен быть доступен моей угловой службе через этот фрагмент кода ниже:
home.service.ts
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Injectable ({
providedIn: 'root'
})
export class HomeService {
constructor(private http: HttpClient) {}
updateCard(id: string, header: string, subheader: string, img: string) {
var json = {id: id, header: header, subheader: subheader, img: img}
return this.http.put<any[]>(`./api/carousel/update/${id}`, json);
}
}
После этих попыток, чтобы вкратце изложить мою проблему, мне нужно проверить из базы данных, существует ли объект уже через ObjectId, а затем обновить его через мои поля ввода, но если нет, updateCard () должен создать еще один объект в моей базе данных. Я надеюсь получить помощь!
РЕДАКТИРОВАТЬ
router.route('/carousel/update/:id').put(function (req, res) {
var data = req.body;
const myquery = { "_id": ObjectId };
// console.log('header: ' + data.header + " id: " + data.id)
console.log(req.params)
db.collection("home").updateMany(myquery, {
$set: {
"img" : data.img,
"header" : data.header,
"subheader": data.subheader
}
}, (err, results) => {
res.status(200).json({status: "ok"})
})
})
Это новый api.js . Пожалуйста, обратитесь.