Optimumkan transaksi SQL dalam API
P粉343408929
P粉343408929 2023-08-18 13:24:59
0
1
521
<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粉343408929
P粉343408929

membalas semua(1)
P粉201448898

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);
  }
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan