我正在学习MERN堆栈开发,并且正在使用用户登录/注册来制作练习应用程序。我已经启动并运行了Node服务器和MongoDB,并且能够注册新用户,更新用户名和密码,检索用户列表以及检索有关单个用户的信息。我正在使用与Postman的localhost:4000/credentials-test/etc
的发布/获取请求来做到这一点(我实际上尚未连接前端)。
我可以通过server.js文件中的以下代码获取有关单个用户的信息:
credsRoutes.route('/user/:id').get(function(req, res) {
let id = req.params.id;
User.findById(id, function(err, user) {
res.json(user);
});
});
我认为我可以使用以下代码执行类似的操作来检查用户名是否已存在(以防止注册时重复的用户名或用户名更改)
credsRoutes.route('/check-user/:username').get(function(req, res) {
let username = req.params.username;
User.find(username, function(err, user) {
if (!user)
res.json('User not found :(');
else
res.json('User found! Details:');
res.json(user);
});
});
但是即使用户名肯定属于现有用户,来自localhost:4000/credentials-test/check-username/testuser
的响应也始终是 User not found :(
。
有什么想法可能会发生这种情况以及如何实施可行的解决方案?
答案 0 :(得分:1)
您需要将查询对象传递到Mongoose模型中。同样,明智的是,当您调用res.json()
时,请退出该函数,因为该函数的其余部分仍可以运行,.end()
是一种将显式结束客户端请求的方法。
尝试:
credsRoutes.route("/check-username/:username").get(function(req, res) {
const username = req.params.username;
User.findOne({ username }, function(err, user) {
if (!user) {
return res.json("User not found :(").end();
}
return res.json(`User found! Details: ${user}`).end();
});
});
`