2016-01-04 3 views
0

Я довольно новичок в nodejs и expressjs. Может кто-то, пожалуйста, убедитесь, что я делаю это правильно. Каждый раз, когда я выполняю ответ через Интернет, например /names/status/10000036/, данные не отображаются.nodejs Нет данных, возвращающихся после функции

Код:

app.get('/names/status/:id', function(req, res) { 
    var data = { 
    ToonID: req.params.id 
    } 
    connection.query('SELECT * FROM NameApproval WHERE ToonID = ?', data.ToonID, function(err, rows, fields) { 
     if (err) throw (err); 

     var id = rows[1]; 
     var wishname = rows[2]; 
     var result = rows[3]; 

     var response = { 
     ToonID: id, 
     WishName: wishname, 
     Result: result 
     }; 
     res.send(JSON.stringify(response)); 
    }); 
}); 

Он успешно подключается к БД, но он возвращает простой JSON { }

Я использую ExpressJS, MySQL-узловые модули.

Благодаря

+0

Вы можете посмотреть на 'data.ToonID' Если он получает правильный идентификатор? –

+0

Да, он захватывает ID '1000036', который является правильным ID – brownzilla

+0

Посмотрите на мой ответ –

ответ

0

EDIT: Предыдущий ответ был безрассудно вывешенным перед я дочитал вопрос

Вы принимаете ID, wishname и привести из позиций в массиве строк, которые не заполнены. Вы хотите просто задать ответ на строки [0].

Я все еще делаю предположения относительно механизма базы данных. Вы должны действительно указать, какую библиотеку баз данных вы используете, и к какой базе данных она подключается.

Вам также необходимо передать второй аргумент connection.query как массив. Вот полное исправление кода:

app.get('/names/status/:id', function(req, res) { 
    var data = { 
    ToonID: req.params.id 
    } 
    connection.query('SELECT id, wishname, result FROM NameApproval WHERE ToonID = ?', [data.ToonID], function(err, rows, fields) { 
     if (err) throw (err); 

     var id = rows[0][0]; 
     var wishname = rows[0][1]; 
     var result = rows[0][2]; 

     var response = { 
     ToonID: id, 
     WishName: wishname, 
     Result: result 
     }; 
     res.send(JSON.stringify(response)); 
    }); 
}); 
+0

Не возражаете, объясняя это тем, что кто-то, кто является новым для nodejs, может понять, потому что то, что вы только что сказали, так запутанно. :) – brownzilla

+0

Я только что отредактировал, какой механизм БД я использую в своем вопросе. :) и никаких проблем. – brownzilla

+0

см. Обновленный ответ, он должен ответить на все ваши вопросы сейчас с помощью примера кода –

0

Я думаю, что значение data.ToonID вариант неправильно, он должен быть массивом:

connection.query('SELECT * FROM NameApproval WHERE ToonID = ?', [data.ToonID], function(err, rows, fields) { 

Изменения data.ToonID с [data.ToonID]

Как указано здесь: https://github.com/felixge/node-mysql#escaping-query-values

+0

Я сделал это. Все еще возвращаю пустую строку JSON: '{}' – brownzilla

+0

Теперь он возвращает ошибку. http://pastebin.com/ ka9N7fCD – brownzilla

+0

Вы уверены, что маршруты правильные. Кажется, вы отвечаете дважды. –

0

Так что я исправил его. Возникла проблема с массивами. Я не знаю, где находится верхний ToonIDToonID { }. Но спасибо всем, кто помог. :)

Выход

{ 
    ToonID: { 
     ToonID: "10000036", 
     WishName: "brownzilla", 
     Result: "PENDING" 
    } 
} 

Код

app.get('/names/status/:id', function(req, res) { 
    var data = { 
    ToonID: req.params.id 
    } 
    connection.query('SELECT * FROM NameApproval WHERE ToonID = ?', [data.ToonID], function(err, rows, fields) { 
     if (err) throw (err); 

     var id = rows[0] 
     var wishname = rows[1] 
     var result = rows[2] 

     var response = { 
     ToonID: id, 
     WishName: wishname, 
     Result: result 
     }; 
     res.send(JSON.stringify(response)); 
    }); 
}); 
Смежные вопросы