Проверьте, существует ли такой же жанр в базе данных mysql

avatar
Nexus
1 июля 2021 в 21:29
40
1
0

Привет всем, я новичок в mysql и хотел бы проверить, существует ли тот же жанр в базе данных, и если это так, он возвращает код состояния, и если жанр не существует, жанр добавляется в базу данных. В настоящее время у меня есть следующие проблемы: он может проверить, существует ли жанр, и вернуть код состояния, но при входе в другой жанр он реагирует так же, как если бы жанр существовал:

файл 1

Insertgenre:function(genre,description,callback){

        var dbConn=db.getConnection();
    
        // connects to the mysql database (contains an asyn function that returns a callback)
        dbConn.connect(function(err){
            if(err){
                console.log(err);
                return callback(err,result);
    
            }else{
                // Query for get all rows from genre table where genre = entered genre
                var checkSql = 'SELECT genre FROM genre WHERE genre = ?';
                
                dbConn.query(checkSql, [genre], function(err1, result) {
                    
                    if(err) {
                        return callback(err,result);
                    
                    }else {
                        // Checking if the result length is more than 0.
                         if(result.length > 0) {
                             return callback(err1,result);
                         }else {
                            var sql="insert into genre(genre,description) values(? ?)";
                            dbConn.query(sql,[genre,description],function(err,result){
                                  dbConn.end();
                            
                            if(err) {
                                console.log(err);
                            } 
                            return callback(err,result);
                            
                        }
                    }
                    }
                });

файл 2

app.post('/genre', function(req,res){
    var genre = req.body.genre;
    var description = req.body.description;
    

    genreDB.Insertgenre(genre,description,function(err,err1,result){
        if(err){
            //console.log(err)
            res.type('json');
            res.statusCode=500;
            res.send(`{"Result":"Internal Error"}`);

        }if(err1){
            console.log(err1)
            res.type('json');
            res.statusCode=422;
            res.send(`{"Result":"The genre name provided already exists"}`);
        }
        else{
            res.type("json");
            res.statusCode=204;
            //res.send(result);
            console.log(result);
            res.send(`{"Affected Rows":"${result.affectedRows}"}`);
        }

    });
});

Источник
Barmar
1 июля 2021 в 21:36
0

Почему в заголовке написано "пользователь", а в вопросе "жанр"?

Nexus
1 июля 2021 в 21:38
0

@Barmar, извини, мой плохой, я отредактирую заголовок

Barmar
1 июля 2021 в 21:40
0

Ваша функция обратного вызова ожидает 3 аргумента, но вы вызываете ее только с 2 аргументами.

Barmar
1 июля 2021 в 21:41
0

Сравните function(err,err1,result) с callback(err,result);. Предполагается, что должно быть два аргумента err, а result должен быть третьим аргументом.

Nexus
1 июля 2021 в 22:11
0

Извините, могу я узнать, в какую строку я должен добавить аргументы?

Ответы (1)

avatar
Barmar
1 июля 2021 в 22:15
0

Ваша функция обратного вызова ожидает, что err будет обычной ошибкой базы данных, а err1 укажет, что жанр уже существует.

Вам нужно вызвать callback() с 3 аргументами, чтобы соответствовать тому, что он ожидает.

У вас тоже опечатка. Во втором запросе аргумент функции обратного вызова равен err1, но вы использовали if(err).

.

И в файле 2 вы должны использовать else if(err1), так как все эти условия взаимоисключающие.

Insertgenre: function(genre, description, callback) {

    var dbConn = db.getConnection();

    // connects to the mysql database (contains an asyn function that returns a callback)
    dbConn.connect(function(err) {
      if (err) {
        console.log(err);
        return callback(err, false, result);

      } else {
        // Query for get all rows from genre table where genre = entered genre
        var checkSql = 'SELECT genre FROM genre WHERE genre = ?';

        dbConn.query(checkSql, [genre], function(err1, result) {

            if (err1) {
              return callback(err1, false, result);

            } else {
              // Checking if the result length is more than 0.
              if (result.length > 0) {
                return callback(null, true, result);
              } else {
                var sql = "insert into genre(genre,description) values(? ?)";
                dbConn.query(sql, [genre, description], function(err, result) {
                    dbConn.end();

                    if (err) {
                      console.log(err);
                    }
                    return callback(err, false, result);

                  }
                }
              }
            });
        });
    })
Nexus
1 июля 2021 в 22:25
0

Привет Спасибо за ответ! Я отредактировал код, но он по-прежнему показывает, что жанр существует после ввода нового жанра.

Barmar
1 июля 2021 в 22:26
0

if(err1) в файле 2 должно быть else if(err1).

Barmar
1 июля 2021 в 22:29
0

У вас была опечатка во втором запросе, его проверка на ошибку должна быть if (err1).

Nexus
1 июля 2021 в 22:33
0

Я внес изменения, и новый жанр был добавлен, но код состояния не отражает

Nexus
1 июля 2021 в 22:35
0

При использовании почтальона для отправки запроса POST он застревает на «отправке запроса», но новый жанр по-прежнему добавляется в базу данных.

Nexus
1 июля 2021 в 22:37
0

Привет, я думаю, что решил проблему! По-видимому, добавление строки res.send(`{"Affected Rows":"${result.affectedRows}"}`); устранило проблему, которая отражает код состояния 204.

Barmar
1 июля 2021 в 22:39
0

Кстати, вы не должны создавать JSON вручную. Используйте res.send(JSON.stringify({"Affected Rows": result.affectedRows}))

Nexus
1 июля 2021 в 22:40
0

Понятно! Большое спасибо за помощь! ценить это :)