cari

Rumah  >  Soal Jawab  >  teks badan

Optimumkan transaksi SQL dalam API

<p>Saya ada temu duga kerja baru-baru ini dan saya mendapat sedikit kerja rumah. Kemudian saya menerima maklum balas bahawa saya mempunyai gabungan pertanyaan dan transaksi yang tidak perlu dalam titik akhir kemas kini saya. </p> <pre class="brush:php;toolbar:false;">export const update = async (req: Request, res: Response, next: NextFunction) => cuba { const reportId = parseInt(req.params.id) const { nama, umur, maklumat } = req.body const report = tunggu ReportModel.findOne({ di mana: { id: reportId } }) jika (!laporan) kembali seterusnya(EntityNotExistError baharu("Laporan tidak wujud")) tunggu ReportModel.update({ nama, umur, info }, { di mana: { id: reportId } }) const _report = tunggu ReportModel.findOne({ di mana: { id: reportId } }) kembalikan res.json({ mesej: "Laporan berjaya disunting", laporan: _laporan }) } tangkap (ralat) { kembali seterusnya(ralat) } }</pre> <p>Seperti yang anda lihat, pertanyaan pertama menyemak sama ada entiti itu wujud, kemudian saya melakukan kemas kini pada entiti dan pertanyaan terakhir mengembalikan entiti yang dikemas kini. Adakah terdapat beberapa cara untuk mengoptimumkan komunikasi dengan pangkalan data? </p>
P粉343408929P粉343408929474 hari yang lalu475

membalas semua(1)saya akan balas

  • P粉201448898

    P粉2014488982023-08-19 10:18:35

    Kod anda melibatkan tiga interaksi berbeza dengan pangkalan data untuk satu operasi kemas kini:

    1. Semak sama ada entiti wujud | ReportModel.findOne()Kemas kini Entiti |
    2. Dapatkan entiti yang dikemas kini untuk kembali dalam respons |
    3. ReportModel.update()Mengurangkan pertanyaan pangkalan data menyelesaikan tugas dan meningkatkan prestasi.
    4. **Kod tetap anda:**ReportModel.findOne()

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

    balas
    0
  • Batalbalas