Не удалось преобразовать в ObjectId значение «undefined» в path «_id» для модели «Product» при попытке отправки маршрутов в TypeScript

#angular #mongodb #typescript #parsing #routes

#угловатый #mongodb — монгодб #машинописный текст #разбор #маршруты #angular #mongodb #синтаксический анализ

Вопрос:

В настоящее время я новичок, работающий над своим самым первым веб-приложением, и я пытаюсь использовать методы CRUD для своего компонента продукта. Я могу выполнять все четыре функции в NodeJS, которые я использовал в бэкэнде для создания Restful API. Но я не могу передать маршрут в моем файле TypeScript. Я пробовал это, собирая много ссылок, но я получаю сообщение об ошибке Cast to ObjectId failed for value "undefined" at path "_id" for model "Product" .

Вот код, который я использовал в своем файле TypeScript для my-products.component.ts :

 import { Component, OnInit } from '@angular/core';

import { ActivatedRoute } from '@angular/router';
import { RestApiService } from '../rest-api.service';
import { DataService } from '../data.service' ;

@Component({
  selector: 'app-my-products',
  templateUrl: './my-products.component.html',
  styleUrls: ['./my-products.component.scss']
})
export class MyProductsComponent implements OnInit {
  
  productId: any;
  products: any;
  btnDisabled = false;
  constructor(private data: DataService, private rest: RestApiService, private activatedRoute: ActivatedRoute) { }

  async ngOnInit() {
  
   
   async remove() {
   const data = await this.rest.delete(
      `http://localhost:397/api/seller/products/${this.productId}`
    );
    data['success']
      ? (this.products = data['products'])
      : this.data.error(data['message']);
  } catch (error) {
    this.data.error(error['message']);
  }

  async update() {
    this.btnDisabled = true;
    try {
      // if (this.validate(this.products)) {
        const form = new FormData();
        for (const key in this.products) {
          if (this.products.hasOwnProperty(key)) {
            if (key === 'images') {
              form.append(
                'images',
                this.products.images,
                this.products.images.name
            );
            } else {
            form.append(key, this.products[key]);
            }
          }
        }
        const data = await this.rest.put(
        'http://localhost:397/api/seller/products/${this.productId}',
        form
        );
        data['success']
          ? this.data.success(data['message'])
          : this.data.error(data['message']);
      // }
    } catch (error) {
      this.data.error(error['message']);
    }
    this.btnDisabled =false;
  }

}
  

Я публикую с надеждой получить решение здесь. Спасибо вам, ребята, за то, что вы такие классные.

Комментарии:

1. В какой строке ошибка?

2. ошибка была в маршруте, поэтому я не смог проанализировать значение идентификатора для удаления и функцию удаления. Но это было решено. Спасибо за ваш ответ.

Ответ №1:

Это была незначительная ошибка. Я, наконец, решил проблему.Если у кого-то возникли трудности с анализом значений в typescript, вот что я сделал, чтобы передать значение id для функции удаления:

  async remove(id: any) {
 const data = await this.rest.delete(
      `http://localhost:397/api/seller/products/${id}`
      
    );
    if (data['success']){
     this.data.success(data['message'])
    }
    else {
      this.data.error(data['message'])
    }
    } catch (error) {
    this.data.error(error['message']);
  

С помощью этого метода он автоматически получит значение ObjectId и следует заданному маршруту. Я сделал то же самое и для обновления.