我正在建立一個小型全端系統(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粉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; }