首頁  >  問答  >  主體

對於不存在的 id n 拋出 new ResourceNotFoundError(id)

我正在建立一個小型全端系統(typescript、express、NodeJs),並且在用戶可以根據所選影院請求電影的其中一個路線中,具體服務如下:

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;
}

澄清 MYSQL 資料庫中有兩個表格—劇院和電影。它們共用一個引用 Theaters 表中的「theatreId」列的外鍵。外鍵是電影表中的外鍵。

現在,用戶有可能會發送一些不存在的 theatreId,在這種情況下,我想拋出新的 ResourceNotFoundError。然而,也有可能 theatreId 確實存在,但只是沒有任何電影與該劇院匹配。在這種情況下,我不想拋出該錯誤。 我還希望它在效能方面表現良好,使用多個查詢檢查資料庫會減慢整個過程。

P粉060528326P粉060528326423 天前622

全部回覆(1)我來回復

  • 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;
    }
    

    回覆
    0
  • 取消回覆