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クエリの結果に基づいて解決することを決定することができます。