【发布时间】:2021-07-07 02:47:15
【问题描述】:
我创建了一个端点来注册新用户,/register。
由于我没有使用数据库,因此我通过将新用户推入数组来更新数组,然后使用fs.writeJSONFile() 将这个新数组写入json 文件。
以下是注册新用户的代码:
router.post("/register", m.checkFieldsPost, async (req, res) => {
const { email, password } = req.body;
const id = { id: helper.getNewId(users) };
try {
const user = await helper.findUser(users, email);
console.log(`user is ${user}`);
if (user)
return res.status(400).json({
message: "That user already exists!",
});
// Generate salt
const salt = await bcrypt.genSalt(10);
// Hash password
const hashedPassword = await bcrypt.hash(password, salt);
const newUser = {
...id,
password: hashedPassword,
email,
};
await users.push(newUser);
await helper.writeJSONFile(filename, users);
return res.status(201).json({
message: `New user was created`,
user: newUser,
originalPassword: password,
hashedPassword,
});
} catch (err) {
res.status(500).json({ message: err.message });
// res.status(500).json({ message: "Mesasge from the catch block" });
}
});
问题似乎出在我在数据库中查找用户的函数中:
function findUser(array, email) {
return new Promise((resolve, reject) => {
const row = array.find((r) => r.email == email);
if (!row) {
reject({
message: "User not found",
});
reject(null);
}
resolve(row);
});
};
我正在尝试注册一个新用户,我首先使用上面的函数检查json文件中是否已经存在电子邮件:
const user = await helper.findUser(users, email);
但是,似乎如果找不到用户,函数调用就会结束,我将向客户端发送回状态代码。我拒绝承诺的方式有问题吗?我如何从承诺拒绝中返回 null?
【问题讨论】:
-
您希望注册多少用户?如果丢失整个用户列表文件会有多糟糕?这可能会以意想不到的方式迅速瓦解。
-
是的,这更适合学校练习,而不是完整的应用程序。我没有将此应用程序用于实际目的。