我想对 mysql 数据库进行查询,如果用户名已经存在,他应该向我发送一条消息,如果不存在,请向我显示新的 ID。我想检查查询 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
}));
};
Controller 文件
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);
})
}
我尝试定义长度,但我认为这不是问题。我用 postman 进行查询,并使用 mysql 作为数据库。我还尝试将 result.length 替换为 username.length 但它会出现“错误用户名未定义”...
最佳答案
那里的结果
可能是未定义的。因为我们没有返回正确的查询结果。这就是我们收到错误的原因。
解决方案:
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 Promise API,我们可以根据SQL查询结果决定拒绝或解决。
关于mysql - NodeJS -> 错误无法读取未定义的属性 'length',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60280957/