Optimiser les transactions SQL dans l'API
P粉343408929
P粉343408929 2023-08-18 13:24:59
0
1
439
<p>J'ai eu un entretien d'embauche récemment et j'ai reçu quelques devoirs. Ensuite, j'ai reçu un retour indiquant que j'avais une combinaison inutile de requêtes et de transactions dans mon point de terminaison de mise à jour. </p> <pre class="brush:php;toolbar:false;">export const update = async (req : demande, res : réponse, suivant : NextFunction) => essayer { const reportId = parseInt (req.params.id) const { nom, âge, informations } = req.body const rapport = attendre ReportModel.findOne ({ où: { identifiant : identifiant du rapport } }) if (!report) return next(new EntityNotExistError("Le rapport n'existe pas")) attendre ReportModel.update({ nom, âge, Info }, { où: { identifiant : identifiant du rapport } }) const _report = attendre ReportModel.findOne ({ où: { identifiant : identifiant du rapport } }) retourner res.json({ message : "Rapport modifié avec succès", rapport : _rapport }) } attraper (erreur) { revenir ensuite (erreur) } }</pré> <p>Comme vous pouvez le voir, la première requête vérifie si l'entité existe, puis j'effectue une mise à jour sur l'entité et la dernière requête renvoie l'entité mise à jour. Existe-t-il un moyen d'optimiser la communication avec la base de données ? </p>
P粉343408929
P粉343408929

répondre à tous(1)
P粉201448898

Votre code implique trois interactions différentes avec la base de données pour une seule opération de mise à jour :

  1. Vérifiez si l'entité existe | Code : ReportModel.findOne()
  2. Mettre à jour le code de l'entité : ReportModel.update()
  3. Obtenir l'entité mise à jour à renvoyer dans la réponse Code : ReportModel.findOne()

La réduction des requêtes de base de données fait le travail et améliore les performances.

**Votre code fixe :**

export const update = async(req: Request, res: Response, next: NextFunction) => {
  try {
    const reportId = parseInt(req.params.id);
    const {
      name,
      age,
      info
    } = req.body;

    // 执行更新并获取受影响的行数
    const [numberOfAffectedRows] = await ReportModel.update({
      name,
      age,
      info
    }, {
      where: {
        id: reportId
      },
      // 此标志检查更新函数是否返回更新后的对象
      returning: true
    });

    // 检查实体是否被找到和更新
    if (numberOfAffectedRows === 0) {
      return next(new EntityNotExistError("报告不存在"));
    }

    // 获取更新后的报告
    const updatedReport = await ReportModel.findOne({
      where: {
        id: reportId
      }
    });

    return res.json({
      message: "报告已成功编辑",
      report: updatedReport
    });

  } catch (error) {
    return next(error);
  }
}
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!