NodeJS - >エラーは、未定義のプロパティ「長さ」を読み込めません

Dariun:

ユーザ名がすでに彼は私にメッセージをスローし、そうでない場合は、私に新しいIDを表示する必要がありますが存在する場合、私は、MySQLデータベースに行われたクエリに望んでいました。私は、クエリresult.lenghtは、それが「未定義のプロパティ 『長さ』を読み込めません」エラーがスローされますがより大きい0であるかどうかを確認したかったです

サービスファイル

const connect = () =>
    mysql.createConnection({
        host: process.env.MYSQL_HOST,
        user: process.env.MYSQL_USER,
        password: process.env.MYSQL_PASSWORD,
        database: process.env.MYSQL_DATABASE
    });
const insert = (conn, user) => {
    return conn.query(`insert into user(username, firstName, lastName, password)   
    values(?,?,?,?)`,
        [
            user.username,
            user.firstName,
            user.lastName,
            user.password
        ]
    )
}
const getByUsername = username => {
    return connect()
        .then(conn => {
            conn.query( 
                `select id, username, firstName, lastName
                from user
                where username = ?`,
                [username]  
            );
        })
}

const create = user => {

    return getByUsername(user.username)
        .then(result => {
            if (result.length > 0) {
                throw new Error(`User "${user.username}" already exists`);
            }
        })
        .then(() => connect())
        .then(conn => insert(conn, user))    
        .then(result =>
            ({
                id: result.insertId
            }));
};

コントローラファイル

const create = (req, res) => {

    userService.create(req.body)
        .then(result => {
            res.status(200);
            res.json(result);
        })
        .catch(err => {
            res.status(500);
            res.send('Error ' + err.message);
        })
}

私はな長さを定義しようとしましたが、私はこれで問題がイマイチだと思います。私は郵便配達でクエリを作成し、私はデータベースとしてMySQLを使用します。私はまた、username.lengthでresult.lengthを交換しようとしたが、それは、「ユーザ名が定義されていないエラー」thorws ...

Gokulakannan T:

resultそこ不定になることがあります。我々は適切なクエリ結果を返しませんので。なぜ我々はエラーを取得しています。

解決:

const getByUsername = username => {
    return new Promise((resolve, reject) => {
        connect()
            .then(conn => {
                conn.query( 
                    `select id, username, firstName, lastName
                    from user
                    where username = ?`,
                    [username],
                    function(err, results) {
                        if (err) {
                            return reject(err);
                        }
                        return resolve(results)
                    }  
                );
            })
    });
}

説明:

あたりとしてmysql2ドキュメント、conn.query結果を返しません。conn.queryメソッドは、コールバックメソッドである第三の引数を有します。ここでは、SQLクエリのエラーおよびクエリの結果を得ることができます。

JavaScriptの約束APIを使用することにより、我々は拒否またはSQLクエリの結果に基づいて解決することを決定することができます。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=8842&siteId=1