Как использовать MySQL в Async Node.JS - PullRequest
0 голосов
/ 13 апреля 2019

Я пришел из PHP и не понимаю, как серия запросов MySQL может быть написана в асинхронном NodeJS.Например, возьмем этот пример из PHP coding:

$mysqli->query("INSERT INTO articles (title) VALUES ('title')");
$article_id = $mysqli->insert_id;

foreach ($tags as $tag) {
    $result = mysqli->query("SELECT tag_id from tags WHERE tag='$tag'");
    if($result->num_rows==1){
        $row=$result->fetch_assoc();
        $tag_id=$row['tag_id'];
    } else {
        $mysqli->query("INSERT INTO tags (tag) VALUES ('$tag')");
        $tag_id=$mysqli->insert_id;
    }

    $mysqli->query("INSERT INTO tag_map (article_id, tag_id) VALUES ($article_id, $tag_id)");
}

Как мы можем написать этот код в Node.JS?

Я конкретно имею в виду оператор if и получаю insert_idдля следующих запросов.

1 Ответ

1 голос
/ 13 апреля 2019

Вы можете получить идентификатор вставки последней записи по этому

 let query = "insert into `articles` (title) VALUES ('" + title + "')";

   db.query(query,(err,result) => {
      if(err){
           return res.status(500).send(err);
        }
         console.log(result.insertId)
   })
     .then((articleid)=>{
        tags.forEach((tag)=>{
         let tagQuery = "SELECT tag_id from tags WHERE tag='"+tag+"';
           // get tag_id from tags 
          db.query(query,(err,result) => {
          // if result length is greater tha 0
          if(result.length > 0){
             tag_id = result.tag_id // set tag id
           }
           else{
                // insert tag into db
                let insertTagQuery = "INSERT INTO tags (tag) VALUES ('"+tag+"')';
                db.query(insertTagQuery,(err,result) => {
                if(err){
                  return res.status(500).send(err);
                  }
                let mapTagQuery = 'INSERT INTO tag_map (article_id, tag_id) VALUES ('"+article_id+"', '"+result.tag_id+"')';

                db.query(mapTagQuery,(err,result) => {
                if(err){
                   return res.status(500).send(err);
                  }
                  console.log(result)
               });

             }

           console.log(result.insertId)
        })

       })
     }) ;  
...