NodeJs выполняют операцию с каждым возвращаемым объектом результата MySql - PullRequest
0 голосов
/ 19 октября 2019

Я использую NodeJ для извлечения данных из базы данных mysql, из результирующего объекта / массива, я хочу выполнить определенное действие (вызвать веб-службу) с данными, возвращенными из mysql. к сожалению, всякий раз, когда я перебираю результаты mysql и вызываю веб-службу, только один объект из набора результатов mysql вызывается для веб-службы. Вот мои коды.

    app.get('/blt', function(req, res){

        var sql = "SELECT dest, amt FROM dit WHERE dest != 'DEST' && amt != 'AMT'";
        pool.getConnection(function(err, conn){
            if(err){
                console.log("MYSQL Connection Error: "+err);
            }
            else{
                conn.query(sql, function(err2, result){
                    if(err2){
                        console.log("Some error: "+err2);
                    }
                    else{
                        //console.log(JSON.stringify(result));
                        Object.keys(result).forEach(function(key) {
                            let result_ = result[key];      
                            let sn = Math.floor((Math.random() * 900000000) + 100000000);  
                            let dacc_ = result_.dest;
                            console.log(dacc_);




                                let blDetail = {
                                    "BalDto": {
                                        "Src": "XXXXXX",
                                        "Code": 1,
                                        "Amt": 10,
                                        "Dac": dacc_, //Variable from mysql resultset
                                        "Cmt": "Ok",
                                        "SN": sn
                                    }
                                };


                            soap.createClient(url, function(err, client) {
                                client.addSoapHeader(AuthHeader);
                                client.BalTransfer(blDetail, function(err, result) {
                                    if (err) {
                                        console.log(err.body); 
                                    } else {
                                        console.log("done");
                                    }
                                });
                            });  
                    }
                    );



                    }
                    conn.release(function(errs){
                        if(errs){
                            console.log(errs)
                        }
                    });
                });
            }
        });
});

Я пытался использовать async, но все же я получил те же результаты, только один из возвращенных наборов результатов mysql отправляется в веб-службу.

Я хочу, чтобы весь набор результатов отправлялся на веб-службу один за другим, пожалуйста, справка

1 Ответ

0 голосов
/ 20 октября 2019

Вы буквально повторяете свой ответ от MySQL, который представляет собой список чего-то, затем вы делаете мыльный вызов для каждого из них.

Что вам нужно сделать, это:

  1. Проверьте мыльный клиент и что они принимают.
  2. Проверьте, принимает ли он массив ваших объектов BalDto
  3. Используйте const listOfBalDtos = object.keys (result) .map ();чтобы сделать ваше преобразование
  4. Сделайте запрос:

     soap.createClient(url, function(err, client) {
      client.addSoapHeader(AuthHeader);
      client.BalTransfer(listOfBalDtos);
     });
    

попробуйте что-нибудь подобное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...