質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Q&A

解決済

1回答

1461閲覧

Node.jsでmysql

seri

総合スコア422

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

0グッド

0クリップ

投稿2017/06/26 14:29

connection.query('select point from users where name= ?;',[users['name']],function (err, rows, fields) { var poi= rows[0].point; if(poi<=15) connection.query('update users set points=0 where name= ?;',[users['name']],function (err2, rows2, fields2) {}); else connection.query('update users set point=point-15 where name= ?;',[users['name']],function (err3, rows3, fields3) {}); });

以上のような処理をさせたいのですが、ネストした状態だと

Cannot read property 'name' of undefined

とゆうエラーがでます。
ネストしていない状態だとエラーは出ないのですが、それだと非同期処理になってしまうため動作が変わってしまいます。

原因はどこにあるのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ネストしていない状態だとエラーは出ない

ご提示のコードを見ただけではネストの有無には関係ないように見えます。なぜなら変数usersへの代入のコードがないからです。問題のエラーはusersという変数の値が未設定なのではなく、変数usersの値(オブジェクト)にnameプロパティーがないというエラーです。ということで、usersへの代入はこのコードの外のスコープにあるはずなのでその部分がわからないとエラーの原因はわかりません。

次のようにご質問のコードの外側のスコープでusersのnameプロパティーの値が適切に設定させされていればエラーは起きないと思います。

javascript

1function (...) { 2 var users = { name: 'john' }; 3 ... 4 connection.query( 5 'select point from users where name = ?;', 6 [users['name']], 7 function (err, rows, fields) { 8 var poi = rows[0].point; 9 if (poi <= 15) 10 connection.query( 11 'update users set points=0 where name = ?;', 12 [users['name']], 13 function (err2, rows2, fields2) {}); 14 else 15 connection.query( 16 'update users set point=point-15 where name = ?;', 17 [users['name']], 18 function (err3, rows3, fields3) {}); 19 }); 20}

投稿2017/06/26 15:24

KSwordOfHaste

総合スコア18392

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

seri

2017/06/26 17:55

もう一度確認したところ、回答にあるように、usersへの値の代入を間違っておりました。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問