使用MySQL的Node.js原型和嵌套回调

汤姆

我的以下代码有两个问题。它是用于注册存储在mysql数据库中的用户的node.js模块的开始。

第一个问题是在第一个查询的回调中,变量this.connection是未定义的。第二个问题是,变量user在同一回调中也是未定义的。因此,代码在以下行崩溃:

this.connection.query('INSERT INTO users{{values values}}', {
                    values: {
                        user_name: user.username,
                        user_email: user.email,
                        user_password: user.password
                    }
                })

请让我知道如何以适当的方式解决此问题。

非常感谢!

完整代码如下:

module.exports = usermodel;

//connection is a mysql-wrapper connection
function usermodel(connection)
{
    this.connection = connection;
}

playermodel.prototype = {

    registerByEmail: function (user, callback) {
        //check firts if the user already exists
        this.connection.query('SELECT user_id FROM users {{where data}}', {
            data: {
                user_email: user.email
            }
        },
        function (err, result) {

            if (err) {
                ...
            } else if (result.length > 0) {
                ...
            } else {
                // this.connection is undefined ????????????
                this.connection.query('INSERT INTO users {{values values}}', {
                    values: {
                        user_name: user.username,
                        user_email: user.email,
                        user_password: user.password
                    }
                }),
                function (err, result) {
                    ...
                }
            }
        });
    }

}
跳动

this.connection未定义,因为this.connection位于playermodel传递给第一个查询的回调函数的实例上,它不知道playermodel实例的上下文。

user应该定义。您可以this.connection通过绑定函数或this在回调将有权访问的变量中设置对的引用来解决未定义问题

//Bind
        playermodel.prototype = {

        registerByEmail: function (user, callback) {
            //check firts if the user already exists
            this.connection.query('SELECT user_id FROM users {{where data}}', {
                data: {
                    user_email: user.email
                }
            },
            function (err, result) {

                if (err) {
                    ...
                } else if (result.length > 0) {
                    ...
                } else {
                    // this.connection is undefined ????????????
                    this.connection.query('INSERT INTO users {{values values}}', {
                        values: {
                            user_name: user.username,
                            user_email: user.email,
                            user_password: user.password
                        }
                    }),
                    function (err, result) {
                        ...
                    }
                }
            //HERE
            }.bind(this));
        }

    }

or

    //me reference to this
        playermodel.prototype = {

            registerByEmail: function (user, callback) {
                //HERE
                var me = this;
                //check firts if the user already exists
                this.connection.query('SELECT user_id FROM users {{where data}}', {
                    data: {
                        user_email: user.email
                    }
                },
                function (err, result) {

                    if (err) {
                        ...
                    } else if (result.length > 0) {
                        ...
                    } else {
                        //HERE
                        me.connection.query('INSERT INTO users {{values values}}', {
                            values: {
                                user_name: user.username,
                                user_email: user.email,
                                user_password: user.password
                            }
                        }),
                        function (err, result) {
                            ...
                        }
                    }
                });
            }

        }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Node.js中的多个mysql查询和回调

来自分类Dev

在Node.js中,如何使用node-seq嵌套嵌套回调

来自分类Dev

node.js在路由中表达嵌套回调

来自分类Dev

在JavaScript中使用promise和原型时的优雅回调绑定

来自分类Dev

Node.js控制流和回调

来自分类Dev

Node.js控制流和回调

来自分类Dev

node.js + MySQL和JSON结果-回调问题,对客户端无响应

来自分类Dev

使用MySQL在Node JS中嵌套查询

来自分类Dev

使用Node.js和回调函数的代码是否与Java线程相同?

来自分类Dev

使用Node.js和回调函数的代码是否与Java线程相同?

来自分类Dev

了解Node.js异步性-循环还是嵌套回调

来自分类Dev

具有嵌套回调格式的Node.js连续方法调用

来自分类Dev

Node.Js MYSQL felixge,删除时回调

来自分类Dev

无法在NodeJS中使用嵌套回调

来自分类Dev

使用JS进行回调

来自分类Dev

使用Bluebird在Promise中包装Node.js回调

来自分类Dev

使用Node.js更好地了解回调

来自分类Dev

Node.js如何使用函数的回调结果

来自分类Dev

使用Node.js回调的明显时间更少

来自分类Dev

Node.js-在回调函数中使用数据

来自分类Dev

使用Node.js进行回调递归插入Mongo

来自分类Dev

node.js回调中“ done”和“ next”之间的区别

来自分类Dev

Node.js和C / C ++集成:如何正确实现回调?

来自分类Dev

在Node.js(异步)中的循环和回调中寻找正确的模式

来自分类Dev

从node.js和mongoose中的回调返回值

来自分类Dev

Node.js:中间件和回调函数的执行顺序?

来自分类Dev

Node.js,Express和Mongo:循环中的回调函数被忽略

来自分类Dev

功能-Node.js中的异步映射,递归和回调的组合

来自分类Dev

在回调函数之外访问由node.js中的readline和fs解析的数据

Related 相关文章

热门标签

归档