首页  >  问答  >  正文

对于不存在的 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 天前624

全部回复(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
  • 取消回复