2015-02-21 21 views
5

bir mysql SEÇ sorgudan değer döndürmek için, ve ben geri aramalar nasıl çalıştığını anlamaya çalışıyorum. Yani, burada benim problem:nasıl node.js için hala çok yeniyim node.js

Ben daha fazla kod koymak vermeliydim:

SONRASI:

app.post('/register', function(req, res) { 

    //get data from the request 
    var data = { 
     username: req.body.username, 
     email: req.body.email, 
     password: req.body.password 
    }; 

    function fetchID(callback) { 
     connection.query('SELECT id_user FROM USERS WHERE username = ?', data.username, function(err, rows) { 
      if (err) { 
       callback(err, null); 
      } else 
       callback(null, rows[0].id_user); 
     }); 
    } 
    var user_id; 
    fetchID(function(err, content) { 
     if (err) { 
      console.log(err); 
      return next("Mysql error, check your query"); 
     } else { 
      user_id = content; 
      console.log(user_id); //undefined 
     } 
    }); 

    console.log(user_id); //undefined 
    var payload = { 
     iss: req.hostname, 
     sub: user_id 
    } 
    console.log(payload.sub); //correct id 
}) 

GET:

app.get('/todos', function(req, res) { 
    if (!req.headers.authorization) { 
     return res.status(401).send({ 
      message: 'You are not authorized !' 
     }); 
    } 

    var token = req.headers.authorization.split(' ')[1]; 
    var payload = jwt.decode(token, "shhh.."); 

    //additional level of security 
    console.log('sub id is : ' + payload.sub); //undefined 
    if (!payload.sub) { 
     return res.status(401).send({ 
      message: 'Authentication failed !' 
     }); 
    } 

}) 
ben olmak her console.log yorumladı

Daha açık.

function fetchID(data, callback) { 
     connection.query('SELECT id_user FROM USERS WHERE username = ?', data.username, function(err, rows) { 
      if (err) { 
       callback(err, null); 
      } else 
       callback(null, rows[0].id_user); 
     }); 
} 

ve geri aramasında İşte o zaman

var user_id; 

fetchID(data, function(err, content) { 
    if (err) { 
     console.log(err); 
     // Do something with your error... 
    } else { 
     user_id = content; 
    } 
}); 

- Ben app.get()

+0

'user_id' değişken' mi undefined' eğer 'console.log (user_id)' doğru ayarlamak için kullanılırken 'else' açıklamada ayarlayarak veya sonrasında' payload.sub '? İlk fonksiyon için –

+0

, '' işlevi fetchID (callback) '' nereye '' data'' nesne geçti oluyor edilir? –

cevap

6

Sizin iki işlev gibi bir şey olmalıdır içinde if (!payload.sub) kontrol yaparken doğru kimliği almak gerekir işlevi, döndürülen content değişkeni user_id değerini tutacaktır. Yukarıda tarif ettiği gibi tam sorunu çözülmüş değil

DÜZENLEME.

İlk (Tablo oluşturma ve bazı kukla veri eklemek) - -

Ama örnek aşağıdaki, ben göstermiştir ki, geri arama mekanizması çalışıyor

use test; 
create table users (id int(11) primary key,username varchar(100)); 
insert into users values(1, "John"); 
insert into users values(2, "Sham"); 

Şimdi yazınızı yaptık tarayıcıda alın ve test edilen yöntem. Bu kod örneği yardımcı olacaktır http://127.0.0.1:1212/getuser?username=john =>user id is -1 ve http://127.0.0.1:1212/getuser?username=sham =>user id is -2

Hope - Şimdi bu istekleri bu çıktıyı üretecek

var application_root = __dirname, 
    express = require("express"), 
    mysql = require('mysql'); 
var app = express(); 
var connection = mysql.createConnection({ 
    host : 'localhost', 
    user : 'root', 
    password : 'admin', 
    database: "test" 
}); 
app.get('/getuser', function(req, res) { 
    //get data from the request 
    var data = { 
     username: req.query.username 
    }; 
    function fetchID(data, callback) { 
     connection.query('SELECT id FROM users WHERE username = ?',   
       data.username, function(err, rows) { 
      if (err) { 
       callback(err, null); 
      } else 
       callback(null, rows[0].id); 
     }); 
    } 
    var user_id; 
    fetchID(data, function(err, content) { 
     if (err) { 
     console.log(err); 
     res.send(err); 
     // Do something with your error... 
     } else { 
     user_id = content; 
     console.log(user_id); 
     res.send("user id is -" + user_id); 
     } 
    }); 
}) 
app.listen(1212); 

-

tam sınıf benim localhost test aşağıdadır node.js. içinde geri arama anlamak

Teşekkür

+0

Metodunu kullandım ama maalesef çalışmıyor. Daha fazla bilgi için ilk gönderimi güncelledim. – redAce