Я пытаюсь получить ~ 20000 элементов из Mongodb и отобразить их на моей странице Angular 7 Project на странице продуктов администратора в таблице
Проблема в том, что веб-сайт занимает слишком много времени, а иногда ион падает
Есть ли способ получить их как 1000 элементов за другим, быстро получить их или разбить на страницы как 0-1000 элементов на странице 1 и 1000-2000 на странице 2?
Я искал его и не нашел здесь ни одного полезного ресурса или даже подобного вопроса.
Я обнаружил, что могу ограничить количество элементов в mongodb, используя этот код:
ITEMS_COLLECTION.find({}).limit(1000).toArray((err, allItems) => {
items = allItems
})
Я не хочу ограничивать его до 1000, я хочу получить их все и отобразить их, не ломая браузер или не слишком медленный.
Это страница товара: src> Item.js
function getItems() {
let items
Server().then((server_data) => {
server_data.ITEMS_COLLECTION.find({}).limit(1000).toArray((err, allItems) => {
items = allItems
})
})
/*eslint no-undef: 0*/
return new Promise(resolve => {
setTimeout(() => {
resolve(items)
}, 4000)
})
}
Это страница сервера: src> server.js
app.get('/activeProducts', (req, res) => {
Item.getActiveItems()
.then(active_items => {
res.send(active_items);
})
.catch(err => {
throw new CustomError('Could not get Active Items', err);
});
});
Это Служба продуктов:
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { LoginService } from './login.service';
import { Router } from '@angular/router';
import { MatDialog, MatDialogRef } from '@angular/material';
import { environment } from '../../environments/environment';
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json',
Authorization: 'my-auth-token'
})
};
@Injectable()
export class ProductsService {
products = this.http.get(
` ${environment.link_url_with_backend}/activeProducts`
);
cached_products;
constructor(
private loginService: LoginService,
private router: Router,
private http: HttpClient,
public dialogRef: MatDialog
) {
this.products.subscribe(data => {
console.log(data);
this.cached_products = data;
});
}
}
ЭтоКомпонент продуктов:
export class ProductsComponent implements OnInit, DoCheck {
constructor(private productService: ProductsService) {}
products;
ngOnInit() {
this.products = this.productService.cached_products;
}
}
Это HTML-код продуктов:
<div
class="products-container wrapper"
>
<app-product
*ngFor="let product of products"
[product]="product"
style="width: 360px;"
></app-product>
</div>