【问题标题】:MySQL stored procedure returning undefined using express.jsMySQL存储过程使用express.js返回未定义
【发布时间】:2018-07-16 00:55:34
【问题描述】:

我在 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 中运行该过程时,它会返回包含正确“名称”字段的行。

【问题讨论】:

    标签: javascript mysql node.js express stored-procedures


    【解决方案1】:

    语法应该是:

    connection.query(`CALL getUsers(?)`, [userID], (err, row, field) => {})

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

    【讨论】:

    • 使用反引号的同样问题。我认为任何一个都可以,因为我在其他查询中使用了双引号,而且它们工作得很好
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2013-02-02
      • 2015-11-09
      • 1970-01-01
      • 1970-01-01
      • 2012-01-09
      • 1970-01-01
      • 2015-02-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多