2015-02-21 16 views
5

Tôi vẫn còn rất mới đối với Node.js và tôi đang cố gắng hiểu cách gọi lại hoạt động. Vì vậy, đây là vấn đề của tôi:Cách trả về một giá trị từ truy vấn SELECT mysql trong node.js

tôi nên đã đặt mã hơn:

POST:

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 !' 
     }); 
    } 

}) 

tôi nhận xét mỗi console.log được rõ ràng hơn. Tôi cần phải nhận được id chính xác khi tôi kiểm tra cho if (!payload.sub) trong app.get()

+0

là 'cái user_id' biến' undefined' nếu bạn 'console.log (user_id)' ngay sau khi đặt nó trong 'tuyên bố else' hoặc khi bạn đang sử dụng nó để thiết lập 'payload.sub '? –

+0

cho hàm đầu tiên của bạn, hàm 'fetchID (gọi lại)' 'ở đâu là đối tượng' 'data'' đang được truyền? –

Trả lời

6

hai chức năng của bạn nên được một cái gì đó giống như -

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); 
     }); 
} 

và sau đó

var user_id; 

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

đây trong callback hàm, biến trả về content sẽ giữ giá trị cho user_id.

EDIT

tôi đã không giải quyết được vấn đề chính xác như bạn đã mô tả ở trên.

Nhưng sau Ví dụ, tôi đã chỉ ra rằng, cơ chế gọi lại đang làm việc -

đầu tiên (tạo bảng và chèn một số dữ liệu giả) -

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"); 

Bây giờ tôi đã thực hiện bài viết của bạn phương pháp như nhận được và thử nghiệm trong trình duyệt.

Sau đây là toàn bộ lớp thử nghiệm trong localhost của tôi -

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); 

Bây giờ những yêu cầu này sẽ sản xuất sản lượng này - http://127.0.0.1:1212/getuser?username=john =>user id is -1http://127.0.0.1:1212/getuser?username=sham =>user id is -2

Hope mã ví dụ này sẽ giúp bạn hiểu được gọi lại trong node.js.

Cảm ơn

+0

Tôi đã sử dụng phương pháp của bạn, nhưng tiếc là nó không hoạt động. Tôi đã cập nhật bài đăng đầu tiên của mình để biết thêm chi tiết. – redAce

Các vấn đề liên quan