javascript - MySQL存储过程使用express.js返回未定义
问题描述
我在 MYSQL 中有一个存储过程 getUsers,它接受一个 int 并返回一个包含用户数据的用户表。当我在 phpmyadmin 中使用“名称”字段运行存储过程时,存储过程返回 1 行,但是当我从 Node.js 调用它时,行字段返回“未定义”。我觉得我一定遗漏了一些东西,因为我对 Node.js 执行的所有其他表操作都以相同的方式工作,但是当我尝试调用这个存储过程时它没有。这是我的代码:
var express = require('express');
var router = express.Router();
var mysql = require('mysql');
var bcrypt = require('bcrypt');
//constants
const tableName = 'user';
var connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '',
database: 'users',
charset : 'utf8mb4'
});
//function to insert to or retrieve data from the database
router.post('/', function(req, res, next) {
let userID = req.body.userID;
connection.query(
"CALL `getUsers`(?)",
[userID],
function(err, row, field) {
if (err) {
res.send({ 'success': false, 'message': 'Could not connect. ' + err});
}
if ( row.length > 0 ) {
console.log('name: ' + row[0].name);
res.send({ 'success': true, 'users': row });
} else {
res.send({ 'success': false, 'message': 'No users found.' });
}
});
}
});
控制台日志返回“名称:未定义”,但是当我在 phpmyadmin 中运行该过程时,它返回包含正确“名称”字段的行。
解决方案
语法应该是:
connection.query(`CALL getUsers(?)`, [userID], (err, row, field) => {})
注意反引号与双引号的方式。
推荐阅读
- ignite - 通过 SQLLine 连接到 ignite 架构
- javascript - 如何总结总javascript jquery
- kibana - 有没有办法将 kibana 仪表板 png 报告放在电子邮件正文中
- node.js - 如何使用 https 而不是 http 在本地运行此 aframe 样板代码?
- python - 最长的算术级数
- python - 编写 Parquet 文件的 pyarrow 不断覆盖现有数据集
- android - 迁移 androidx 和 android sdk 29 后出现崩溃?
- microsoft-teams - 无法为 POST 获取 EntityId 以创建新的频道选项卡
- c - 如何为 GCC 运行链接描述文件
- linux - Pulseaudio 设置/检查默认源