Как правильно использовать async await в запросе к базе данных

#javascript #express

#javascript #экспресс

Вопрос:

Это самый простой маршрут, который я использую:

 router.get('/:date', async (req, res) => {
    let tracks = []
    let query = 'SELECT * from `tracks` where `playlistDate` = '' req.params.date '''
    let result = await pool.query(query)
    console.log(result)
})
  

Я знаю, что это само по себе не сработает, но что мне нужно сделать, чтобы иметь возможность использовать await для функции запроса, подобной этой?


Это пул с измененными учетными данными и addr.

 var pool  = mysql.createPool({
    poolLimit : 10,
    host            : 'HOST',
    user            : 'USER',
    password        : 'PASS',
    database        : 'DB'
});

  

Комментарии:

1. pool.query возвращает ли метод обещание? если это так, ваш код верен

2. @Laif Где pool определено? Пожалуйста, опубликуйте больше контекста.

3. используете ли вы npm mysql для узла?

4. вы должны проверить документы в используемой вами библиотеке, в mysql one наверняка есть много примеров, и это очень распространенная библиотека для использования, поэтому вы найдете 100 учебных пособий.. ваш код открыт для внедрения SQL, он должен использовать playlistDate = ? и передавать его в качестве параметра. смотрите Документы, в которых будут примеры.

5. это действительно зависит от используемой вами библиотеки… mysql2 вы бы использовали await pool.query(query).promise() , например

Ответ №1:

Возможно, эта логика поможет. Это зависит от того, как вы его структурировали.

 var pool  = mysql.createPool({
    poolLimit : 10,
    host            : 'HOST',
    user            : 'USER',
    password        : 'PASS',
    database        : 'DB'
});


const getTracks = (date) => {
  return new Promise((resolve, reject) => {
    let query = 'SELECT * FROM tracks WHERE playlistDate = ?'
    
    pool.query(query, [date], (err, res) => {
      if (err) {
        reject(err);
        return;
      }
      
      resolve(res);
    })
  })
};


router.get('/:date', async (req, res) => {
    try {
      let tracks = await getTracks(req.params.date);
      return res.status(200).json(tracks);
    } catch (err) {
      return res.status(400).json(err);
    }
    
})