Потому что вы используете сохраненный процесс. insertId
функция модуля mysqljs недоступна. Сконструировав свой запрос, вы по существу выгружали эту задачу в свою хранимую процедуру, поэтому вы видите ожидаемый результат в возвращенном элементе rows
без дополнительной области действия.
Хотя в этом подходе нет ничего плохого, использование хранимого процесса для такого простого запроса может быть слишком сложным, и оно ограничивает доступные вам функции модуля по сравнению с прямым запросом INSERT
.
Рассмотрим эту альтернативу, где вам будет доступна функция insertId
:
apiconnection.query('INSERT INTO tbl1 SET ?', {name: name}, function (error, results, fields) {
if (error) throw error;
console.log(results.insertId);
});
Это также даст вам доступ к другим элементам объекта results
, таким как затронутые строки или измененные строки:
https://github.com/mysqljs/mysql#getting-the-number-of-affected-rows
В отношении несвязанной заметки действуйте осторожно, используя const id = …
в том виде, в каком вы находитесь в функции, в которой производители постоянно меняют результаты. Переменные, созданные const, являются неизменяемыми. В этой ситуации вы можете использовать let =
или var =
в зависимости от того, где вам нужен доступ к этим данным. Похоже, что вам нужно только в следующем запросе, поэтому я бы порекомендовал let
. Вы можете читать дальше по теме здесь:
http://2ality.com/2015/02/es6-scoping.html