2015-07-04 35 views
15

Tôi hiện đang phát triển một ứng dụng dành cho máy tính để bàn với Node-webkit. Trong quá trình đó, tôi cần lấy một số dữ liệu từ một cơ sở dữ liệu MySQL cục bộ.Cách nhập một đối tượng RowDataPacket

Truy vấn hoạt động tốt, nhưng tôi không thể tìm ra cách truy cập kết quả. Tôi lưu trữ tất cả chúng trong một mảng mà sau đó được chuyển đến một hàm. Trong giao diện điều khiển họ trông như thế này:

RowDataPacket {user_id: 101, ActionsPerformed: 20} 
RowDataPacket {user_id: 102, ActionsPerformed: 110} 
RowDataPacket {user_id: 104, ActionsPerformed: 3} 

Và đây là cấu trúc truy vấn:

var ret = []; 
conn.query(SQLquery, function(err, rows, fields) { 
    if (err) 
     alert("..."); 
    else { 
     for (var i of rows) 
      ret.push(i); 
    } 
    doStuffwithTheResult(ret); 
} 

Làm thế nào để lấy này trong doStuffwithTheResult chức năng? Các giá trị là quan trọng hơn, nhưng nếu tôi có thể nhận được các phím cũng sẽ là tuyệt vời.

Trả lời

38

Hóa ra chúng là đối tượng bình thường và bạn có thể truy cập chúng thông qua user_id.

Nếu kết quả là một mảng, bạn sẽ phải sử dụng [0].user_id.

+0

Cảm ơn bạn đã quay lại để trả lời câu hỏi của riêng bạn. Tôi đã làm 'RowDataPacket.user_id' và nó đã không được xác định. Điều này tiết kiệm cho tôi một số nhức đầu :) –

+1

Nếu kết quả là trong một mảng, sau đó bạn cần phải truy cập chúng như kết quả [0] .user_id – zegulas

2

bạn cố gắng mã mang đến cho JSON mà không rowdatapacket:

var ret = []; 
conn.query(SQLquery, function(err, rows, fields) { 
    if (err) 
     alert("..."); 
    else { 
     ret = JSON.stringify(rows); 
    } 
    doStuffwithTheResult(ret); 
} 
+2

Khi tôi sau đó làm ret [0] tôi lấy lại chỉ "[" thay vì hàng? – Wayneio

11

Tôi cũng đã gặp cùng một vấn đề thời gian gần đây, khi tôi sử dụng mực nước trong dự án rõ ràng về việc truy vấn phức tạp, sử dụng câu lệnh SQL để truy vấn.

đây là giải pháp của tôi: đầu tiên chuyển đổi giá trị trả lại (đối tượng RowDataPacket) thành chuỗi và sau đó chuyển đổi chuỗi này thành đối tượng json.

Sau đây là mã:

//select all user (查询全部用户) 
find: function(req, res, next){ 
    console.log("i am in user find list"); 
    var sql="select * from tb_user"; 

    req.models.tb_user.query(sql,function(err, results) { 
     console.log('>> results: ', results); 
     var string=JSON.stringify(results); 
     console.log('>> string: ', string); 
     var json = JSON.parse(string); 
     console.log('>> json: ', json); 
     console.log('>> user.name: ', json[0].name); 
     req.list = json; 
     next(); 
    }); 
} 

Sau đây là giao diện điều khiển:

>> results: [ RowDataPacket { 
    user_id: '2fc48bd0-a62c-11e5-9a32-a31e4e4cd6a5', 
    name: 'wuwanyu', 
    psw: '123', 
    school: 'Northeastern university',                                   
    major: 'Communication engineering',                                    
    points: '10', 
    datems: '1450514441486', 
    createdAt: Sat Dec 19 2015 16:42:31 GMT+0800 (中国标准时间),                         
    updatedAt: Sat Dec 19 2015 16:42:31 GMT+0800 (中国标准时间),                         
    ID: 3, 
    phone: 2147483647 } ] 
>> string: [{"user_id":"2fc48bd0-a62c-11e5-9a32-a31e4e4cd6a5","name":"wuwanyu","psw":"123","school":"Northeastern university","major":"Communication engineering","points":"10","datems":"1450514 
441486","createdAt":"2015-12-19T08:42:31.000Z","updatedAt":"2015-12-19T08:42:31.000Z","ID":3,"phone":2147483647}] 
>> json: [ { user_id: '2fc48bd0-a62c-11e5-9a32-a31e4e4cd6a5', 
    name: 'wuwanyu', 
    psw: '123', 
    school: 'Northeastern university',                                   
    major: 'Communication engineering',                                    
    points: '10', 
    datems: '1450514441486', 
    createdAt: '2015-12-19T08:42:31.000Z', 
    updatedAt: '2015-12-19T08:42:31.000Z', 
    ID: 3, 
    phone: 2147483647 } ] 
>> user.name: wuwanyu 
+1

tôi đã kết thúc bằng cách sử dụng 'JSON.parse (JSON.stringify (results)) ' – RozzA

+0

Tôi muốn kết quả trên lối vào của mình và tất cả những gì tôi phải làm là' res.send (JSON.stringify (results)) ', không cần JSON.parse'. nó được phân tích tự động trên giao diện người dùng. Cám ơn đã chỉ tôi hướng đi đúng! –

3

Bạn có thể sao chép tất cả các thuộc tính riêng đếm được của một đối tượng mới bằng cách Object.assign(target, ...sources):

trivial_object = Object.assign({}, non_trivial_object); 

như vậy trong trường hợp của bạn, nó phải là đủ để thay đổi

ret.push(i); 

để

ret.push(Object.assign({}, i)); 
+0

Điều này chắc chắn cảm thấy sạch hơn JSON.parse (JSON.stringify (x)), mặc dù tôi không biết sự khác biệt về hiệu suất là gì ... –

0

Tôi tìm thấy một cách dễ dàng

Object.prototype.parseSqlResult = function() { 
    return JSON.parse(JSON.stringify(this[0])) 
} 

Tại lớp db làm phân tích cú pháp như

let users= await util.knex.raw('select * from user') 
    return users.parseSqlResult() 

Điều này sẽ trả về các phần tử như mảng JSON bình thường.

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