繁体   English   中英

MySQL存储过程使用express.js返回未定义

[英]MySQL stored procedure returning undefined using express.js

我在MYSQL中有一个存储过程getUsers,它接受一个int并返回带有用户数据的用户表。 当我在phpmyadmin中使用“名称”字段运行存储过程时,该存储过程返回1行,但是当我从Node.js调用该存储过程时,该行字段返回“ undefined”。 我觉得我一定会丢失一些东西,因为我对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) => {})

请注意反引号与双引号的方式。

只是想让大家知道我通过将row [0] .name更改为row [0] [0] .name来解决了这个问题。事实证明,存储过程与常规查询不同,它们返回的是数组而不是一个数组数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM