suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Löst einen neuen ResourceNotFoundError(id) für die nicht vorhandene ID n aus

Ich baue ein kleines Full-Stack-System (Typescript, Express, NodeJs) auf und auf einer der Routen kann der Benutzer Filme basierend auf dem ausgewählten Kino anfordern. Die spezifischen Dienste lauten wie folgt:

async function getMoviesByTheatreId(theatreId : number) : Promise<MovieModel[]> {

    // SQL:
    const sql = 'SELECT * FROM movies where theatreId = ?;'

    // Call dal:
    const movies = await dal.execute(sql ,[theatreId]);

    // Return:
    return movies;
}

Klarstellung In der MYSQL-Datenbank gibt es zwei Tabellen: Theater und Filme. Sie teilen sich einen Fremdschlüssel, der auf die Spalte „theatreId“ in der Tabelle „Theater“ verweist. Der Fremdschlüssel ist ein Fremdschlüssel in der Filmtabelle.

Jetzt besteht die Möglichkeit, dass der Benutzer eine Theater-ID sendet, die nicht existiert. In diesem Fall möchte ich einen neuen ResourceNotFoundError auslösen. Es ist jedoch auch möglich, dass die Theater-ID zwar existiert, es aber einfach keine Filme gibt, die zu diesem Theater passen. In diesem Fall möchte ich diesen Fehler nicht auslösen. Ich möchte auch, dass die Leistung gut ist. Die Verwendung mehrerer Abfragen zur Überprüfung der Datenbank verlangsamt den gesamten Prozess.

P粉060528326P粉060528326500 Tage vor685

Antworte allen(1)Ich werde antworten

  • P粉071743732

    P粉0717437322023-09-14 15:36:55

    首先,在查询 Movies 表之前,检查 Theaters 表中是否存在具有所提供的 theatreId 的剧院。然后就可以查询电影了。

    这里是示例代码:

    async function getMoviesByTheatreId(theatreId : number) : Promise<MovieModel[]> {
    
        const theatreSql = 'SELECT * FROM theatres WHERE theatreId = ?';
        const theatre = await dal.execute(theatreSql, [theatreId]);
    
        if (theatre.length === 0) {
            // throw new ResourceNotFoundError('Theatre not found');
        }
    
        // SQL to retrieve movies with provided theatreId:
        const moviesSql = 'SELECT * FROM movies WHERE theatreId = ?;'
    
        // Call dal:
        const movies = await dal.execute(moviesSql ,[theatreId]);
    
        // Return:
        return movies;
    }
    

    Antwort
    0
  • StornierenAntwort