2014-10-15 4 views
1

express.js를 사용하는 쿼리에 문제가 있습니다. Citta_p와 Citta_a는 두 개의 배열이며 원하는 것은 모든 쿼리가 모든 도시의 모든 ID를 제공한다는 것입니다. 대신, 내가 얻는 것은 바로 마지막 값입니다. var에서 i = 1로 시작하고 i = 0에 대한 값을 얻지 못합니다. 누구든지 나를 도울 수 있습니까? 이 내 코드입니다 :쿼리가 작동하지 않습니다. express.js

page.html

<div class = "container" id = "nuova_linea" style= "display : none"> 
<div class="row"> 
    <div class="col-md-12" style = "margin-top: 100px;"> 
     <form class="form-horizontal" method="post" action="/inseriscilinea"> 
     <div class='alert alert-error'> 
     <button type='button' class='close' data-dismiss='alert'>×</button> 

     <fieldset> 
     <legend class="text-center header">Inserisci una nuova linea </legend> 

<div class="form-group"> 
    <label class="col-md-3 control-label" style = "margin-left: 200px">Nome Linea: </label> 
    <div class="col-md-5"> 
     <input type="text" class="form-control" name="nome_linea" /> 
    </div> 
</div> 

<div class="form-group"> 
    <label class="col-md-3 control-label" style = "margin-left: 200px">Numero fermate: </label> 
    <div class="col-md-1"> 
     <input type="text" class="form-control" id="numero_fermate" name = "numero"></div> 
     <div><input type="button" onclick = "AggiungiFermate()" class = "btn btn-primary" id="button" value="Invia"> 
    </div> 
</div> 

<div id = "contenitore"></div> 

<div id = "miefermate" style = "display : none"> 
<div class="form-group"> 
    <label class="col-md-3 control-label" style = "margin-left: 200px">Città di partenza: </label> 
    <div class="col-md-5"> 
     <input type="text" class="form-control" name="nome_citta_p" /> 
    </div> 
</div> 

<div class="form-group"> 
    <label class="col-md-3 control-label" style = "margin-left: 200px">Città di arrivo: </label> 
    <div class="col-md-5"> 
     <input type="text" class="form-control" name="nome_citta_a" /> 
    </div> 
</div> 

<div class="form-group"> 
    <label class="col-md-3 control-label" style = "margin-left: 200px">Km: </label> 
    <div class="col-md-5"> 
     <input type="text" class="form-control" name="km" /> 
    </div> 
</div> 

<div id = "salva" style = "display : none"> 
<div class="form-group"> 
    <div class="col-md-5 col-md-offset-3"> 
     <button type="submit" class="btn btn-primary">Salva</button> 
    </div> 
</div> 

</div> 

</div> 

</div> 

</div> 

<script type = "text/javascript"> 

    function AggiungiFermate() { 
     for(var i=0;i<$("#numero_fermate").val();i++) { 
      $("#contenitore").append($("#miefermate").html()) 
     } 
     $("#salva").show("slow"); 
    } 
</script> 

page.js

exports.insertLine = function(req,res) { 



var linea = req.body.nome_linea; 
var numero = req.body.numero; 
var citta_p = req.body.nome_citta_p; 
var citta_a = req.body.nome_citta_a; 


var km = req.body.km; 



req.getConnection(function(err,connection) { 

for(var i=0;i<numero;i++) { 

    var sql = connection.query("select c.id,cc.id from città as c, città as cc where (c.nome = ? and cc.nome = ?)",[citta_p[i],citta_a[i]], function(err,rows) { 

    if(err) console.log("%s", err); 

    if(rows.length > 0) { 
     console.log(rows); 

     } 
    } 
    }); 
} 


}); 

}; 
+0

는 비동기입니다. 루프가 작동하지 않습니다. 흐름 제어를 위해 [async] (https://github.com/caolan/async)를 사용할 수 있습니다. – Maroshii

+0

네,하지만 두 번째 배열없이 쿼리를 작성하면 쿼리가 잘못되었다고 생각합니다. 비록 내가 사이클을 가지고 있지 않지만 2 개의 문자열들/배열들에 ID를 원한다고해도 작동하지 않습니다. – simonav

답변

0

insertLine은 다음과 비슷한 모습이 될 것 Node.js를 IO에서

// npm install async 
var async = require('async'); 

exports.insertLine = function(req,res) { 
    var linea = req.body.nome_linea; 
    var numero = req.body.numero; 
    var citta_p = req.body.nome_citta_p; 
    var citta_a = req.body.nome_citta_a; 
    var km  = req.body.km; 

    req.getConnection(function(err,connection) { 
    var q = "select c.id,cc.id from città as c, città as cc where (c.nome = ? and cc.nome = ?)"; 
    async.times(numero,function(i,next){ 
     connection.query(q,[citta_p[i],citta_a[i]],function(err,rows){ 
     if(err) return next(err); 
     console.log(i,rows); 
     next(null,rows); 
     }); 
    },function(err,rows){ 
     if(err) res.send('error'); 
     else if(!rows || !rows.length) res.redirect('/somewhere') 
     else res.send('ok'); 
    }); 
    }); 
}; 
+0

감사합니다 : D 조 지금 작동! – simonav

+0

다른 문제가 생겼습니다. 죄송합니다. 내 쿼리 결과 res.redirect() 사용해야하지만 비동기 때문에 수 없습니다. 어떻게해야합니까? -> if (rows.length> 0) { res.redirect ('/ lines'); } – simonav

+0

@simonav 답변이 업데이트되었습니다. 도움이 되었기를 바랍니다. – Maroshii