2016-04-04 15 views
3

Bir MySQL veritabanına karşı 2 sorgu çalıştırmaya çalışıyorum ve çalışmıyorlar. Ve göster, hatalar yap, bunu daha iyi bir şekilde yapabilir miyim? Esas olarak home.handlebars dosyasında nasıl görüntüleneceğini ve MySQL veritabanından 1'den fazla sorgu nasıl yapılacağını soruyorum.node.js ile mysql'de nasıl multy sorguları yapılır

var express = require('express'); 
var handlebars = require('express-handlebars'); 
var bodyParser = require('body-parser') 
var mysql = require('mysql'); 

var app = express(); 

app.engine('handlebars', handlebars({defaultLayout: 'main'})); 
app.set('views', __dirname + '/views'); 
app.set('view engine', 'handlebars'); 
app.use(express.static('public')); 
app.use(bodyParser.json()); // support json encoded bodies 
app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies 

var connection = mysql.createConnection({ 
    host: 'localhost', 
    user: 'root', 
    password: 'root', 
    database: 'translation_project' 
}); 

connection.connect(); 

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

    var translatorid = 45; 

    var sqlQuery = "SELECT title,type FROM itemtable;" 
    connection.query(sqlQuery,function(err,rows,fields){ 
     if(err){ 
      console.log('Error'+err); 
     }else{ 
      res.render('home',{items:rows}); // to be displayed in the home page 
     } 
    }); 
    var sqlQuery2 = "SELECT dateoftranslation FROM translateditems;" 
    connection.query(sqlQuery2,function(err,rows,fields){ 
     if(err){ 
      console.log('Error'+err); 
     }else{ 
      res.render('home',{dates:rows}); // to be displayed in the home page 
     } 
    }); 

}); 

app.listen(3000, function() { 
    console.log('Server is running at port 3000'); 
}); 

ve burada home.handlebars ben böylece hem sorguları için bekleyebilir Promises kullanmayı düşünün home.handlebars

<!doctype html> 
<html lang="en"> 
<head> 
    <meta charset="utf-8"> 
    <title>Users Profile</title> 
</head> 

<body> 
    <h1> Mohamed </h1> 
    {{{body}}} 
</body> 
</html> 
+0

Lütfen sorunun ne olduğunu açıklayabilir misiniz? "Hata veriyor" çok açıklayıcı değil. Lütfen okumak için bir dakikanızı ayırın [İyi bir soru nasıl sorabilirim?] (Http://stackoverflow.com/help/how-to-ask) Sorunuzu her zaman [düzenleyebilirsiniz]. – Carpetsmoker

+0

şimdi kontrol et? –

cevap

1

dosyası edilir Burada

<h1> My Applied Items </h1> 
{{#each items}} <!-- the items refreneced in the index page--> 

<p>{{title}}</p> 
<p>{{type}}</p> 


{{/each}} 
{{#each dates}} <!-- the dates refreneced in the index page--> 

<p>{{dateoftranslation}}</p> 


{{/each}} 

ve dosya olduğunu sonucu istemciye göndermeden önce döndürme:

function query(sqlQuery) { 
    return new Promise(function (resolve, reject) { 
     connection.query(sqlQuery, function (err, result) { 
      if (err) { 
       reject(err); 
      } else { 
       resolve(result); 
      } 
     }); 
    }); 
} 

app.get('/', function (req, res) { 
    var query1 = query("SELECT title,type FROM itemtable;"); 
    var query2 = query("SELECT dateoftranslation FROM translateditems;"); 

    Promise.all(query1, query2).then(function (result) { 
     res.render('home', { 
      items: result[0], 
      dates: result[1] 
     }); 
    }); 
}); 

1

Sen dolayı connection.query() zaman uyumsuz doğaya iç içe geri aramasında yapmalı.

app.get('/', function(req, res) { var translatorid = 45; var sqlQuery = "SELECT title,type FROM itemtable;", sqlQuery2 = "SELECT dateoftranslation FROM translateditems;"; connection.query(sqlQuery,function(err,rows1){ if(err){ console.log('Error'+err); } else{ connection.query(sqlQuery2,function(err,rows2){ if(err){ console.log('Error'+err); } else{ res.render('home',{items:rows1,dates:rows2}); } }); } }); }); 

birkaç sorgular yapıyorsanız ve Geri arama o zaman promise denemelisiniz veya bu async şekilde yapabilirsiniz (nedeniyle çok yuvalama geri aramaları olmayan okunabilirlik için) iç içe istemiyoruz. aşağıda async yoludur.

var async=require('async'); 
connection.connect(); 

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

    var translatorid = 45; 
    var sqlQuery = "SELECT title,type FROM itemtable;", 
    sqlQuery2 = "SELECT dateoftranslation FROM translateditems;", 
    sqlQuery3="someQuery", 
    sqlQuery4="someOtherQuery", 
    sqlQuery5="someOtherOtherQuery"; 

    async.parallel([function(cb){ 
    connection.query(sqlQuery,function(err,rows1){ 
     if(err){ 
     console.log('Error'+err); 
     cb(err); 
     } 
     else{ 
     cb(null,rows1); 
     } 
    }); 
    },function(cb){ 
    connection.query(sqlQuery2,function(err,rows2){ 
     if(err){ 
     console.log('Error'+err); 
     cb(err); 
     } 
     else{ 
     cb(null,rows2); 
     } 
    }); 
    },function(cb){ 
    connection.query(sqlQuery3,function(err,rows3){ 
     if(err){ 
     console.log('Error'+err); 
     cb(err); 
     } 
     else{ 
     cb(null,rows3); 
     } 
    }); 
    },function(cb){ 
    connection.query(sqlQuery4,function(err,rows4){ 
     if(err){ 
     console.log('Error'+err); 
     cb(err); 
     } 
     else{ 
     cb(null,rows4); 
     } 
    }); 
    },function(cb){ 
    connection.query(sqlQuery5,function(err,rows5){ 
     if(err){ 
     console.log('Error'+err); 
     cb(err); 
     } 
     else{ 
     cb(null,rows5); 
     } 
    }); 
    }],function(err,results){ 
    if(err){ 
    // out of those 5 tasks at least one caused some error. 
    // handle that. 
     return; 
    } 
    // no error occurred. 
    var rows1=results[0], 
     rows2=results[1], 
     rows3=results[2], 
     rows4=results[3], 
     rows5=results[4]; 
    res.render('home',{items:rows1,dates:rows2,other1:rows3,other2:rows4,other3:rows5}); 
    }); 
}); 
+0

Bu harika bir, teşekkürler :) Eğer bu konuda okuyabileceğim herhangi bir öğretici varsa? Tekrar teşekkürler! –

+0

npmjs belgeseli yeterlidir .... Linkleri zaten belgesellere ekledim. onları kontrol et! – vkstack

+0

Çok minnettarım, teşekkürler! –

İlgili konular