mysql throw new ResourceNotFoundError(id)for id n that's not exist

eqoofvh9  于 2023-03-28  发布在  Mysql
关注(0)|答案(1)|浏览(128)

我正在构建一个小型的全栈系统(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;
}
  • clarification* MYSQL数据库中有两个表- theatres和movies。它们共享一个外键,该外键引用theatres表中的“theatreId”列。外键是movies表中的外键。

现在,有可能用户会发送一些不存在的theatreId,在这种情况下,我想抛出新的ResourceNotFoundError。然而,也有可能theatreId确实存在,但没有任何电影匹配这个剧院。在这种情况下,我不想抛出那个错误。我也希望它在表演方面是好的,因为使用多个查询检查数据库会减慢整个过程。

xv8emn3q

xv8emn3q1#

首先,在查询movies表之前,检查theatres表中是否存在提供了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;
}

相关问题