Tengo una ruta expresa que necesita recuperar una fila de una base de datos, verifique si un campo tiene un valor establecido y si no lo establece. Luego, los datos de la fila se envían de vuelta al cliente.
Sé que el nodo se ejecuta en un solo subproceso, pero las operaciones de E/S se ejecutan de forma asincrónica, por lo que creo que puedo tener un problema si, mientras el primer cliente está esperando para escribir en la base de datos, llega un segundo cliente, lee un valor nulo y realiza el escribir una segunda vez.
No puedo permitir que esto suceda ya que el valor escrito es un valor compartido del que solo puede haber uno.
¿Tengo razón en que esto podría suceder y, de ser así, cuál es la forma recomendada de manejar esto?
Gracias.
let express = require('express'); let router = express.Router(); router.post('/getRoomStateByRoomUrl', async (req, res, next) => { const roomUrl = req.body.room_url; try { //READ FROM DB const roomState = await RoomStateModel.getRoomStateByRoomUrl(roomUrl); if(!roomState.tokboxSessionID) { const newSessionID = await TokboxService.createSession(); //WRITE TO DB await RoomStateModel.setTokboxSessionID(newSessionID); roomState.tokboxSessionID = newSessionID; } res.status(200).json(roomState); } catch (error) { next(error); } });