Node.js - Express & amp; mysql TypeError: res.json не является функцией, хотя вставка выполнена успешно

Есть разница, но тонкая. Посмотрите на это следующим образом: struct Foo вводит новый тип. Второй создает псевдоним Foo (а не новый тип) для неназванного типа struct.

7.1.3 Спецификатор typedef

1 [.. .]

Имя, объявленное с помощью спецификатора typedef, становится typedef-name. В пределах своей декларации имя typedef синтаксически эквивалентно ключевому слову и называет тип, связанный с идентификатором, способом, описанным в разделе 8. Таким образом, typedef-name является синонимом другого типа. Имя typedef не вводит новый тип , как это делает объявление класса (9.1) или объявление enum.

8 Если декларация typedef определяет неназванный класс (или перечисление) , первое имя typedef, объявленное объявлением как тип класса (или тип перечисления), используется для обозначения типа класса (или типа перечисления) только для целей привязки (3.5). [Пример:

typedef struct { } *ps, S; // S is the class name for linkage purposes

Итак, typedef всегда используется в качестве заполнителя / синонима для другого типа.

0
задан Philipp M 13 July 2018 в 09:11
поделиться

2 ответа

Параметр res вашей функции скрыт от возвращаемого значения res от вызова connection.query. Переименуйте параметр res этого вызова на result (например), и вы должны быть в порядке:

connection.query(insertQuery,[newUserMysql.email, newUserMysql.username, newUserMysql.password],function(err, result, rows) {
              if(err){
                    console.log('Insert error');
                    //res.json({ err: 'Insert error'});
                } else {
                    console.log('Insert successful');
                    return res.json({ 'success': 'Insert successful'});
                    //return done(null, newUserMysql);
                }
});

Когда у вас есть вложенные области с конфликтующими именами переменных, переменная ближайшая (scope- мудрый), откуда вы ссылаетесь на это противоречивое имя.

2
ответ дан Quentin Hayot 17 August 2018 в 13:17
поделиться
  • 1
    Я изменил его соответственно ... но result.json ({'success': 'Insert successful'}); все еще дает мне ошибку: TypeError: result.json не является функцией – Philipp M 13 July 2018 в 09:22
  • 2
    Здесь вы должны держать res.json. Просто измените function(err, res, rows) на function(err, result, rows). Я обновил свой ответ, чтобы избежать путаницы. – Quentin Hayot 13 July 2018 в 09:23
  • 3
    Это сработало ... много спасибо – Philipp M 13 July 2018 в 09:25

Вы переопределяете res в своей функции connection.query(insertQuery, [.....], function(err, res, rows) { ...}).

То, что res перекрывает res с вашего экспресс-маршрутизатора в рамках этой функции

1
ответ дан DoXicK 17 August 2018 в 13:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: