我一直在做一些小型学校项目,以制作我们自己的API并将其连接到有角度的前端。
我一直在遵循有关操作的指南,并且遇到了以下问题:我的应用在实现控制器后开始引发内部服务器错误500。
在导入用于用户注册的控制器之前,一切工作正常。 Posts控制器工作正常,ap的登录部分也是如此
我尝试记录错误,但不会输出任何内容。
这是我的代码:
用户路线
const express = require("express");
const UserController = require("../controllers/user");
const router = express.Router();
router.post("/signup", UserController.createUser);
router.post("/login", UserController.userLogin);
module.exports = router;
用户控制器
const bcrypt = require("bcrypt");
const jwt = require("jsonwebtoken");
const User = require("../models/user");
exports.createUser = (req, res, next) => {
bcrypt.hash(req.body.password, 10).then(hash => {
const user = new User({
email: req.body.email,
password: hash
});
user
.save()
.then(result => {
res.status(201).json({
message: "User created!",
result: result
});
})
.catch(err => {
res.status(500).json({
message: "Invalid authentication credentials!"
});
});
});
}
exports.userLogin = (req, res, next) => {
let fetchedUser;
User.findOne({ email: req.body.email })
.then(user => {
if (!user) {
return res.status(401).json({
message: "Auth failed"
});
}
fetchedUser = user;
return bcrypt.compare(req.body.password, user.password);
})
.then(result => {
if (!result) {
return res.status(401).json({
message: "Auth failed"
});
}
const token = jwt.sign(
{ email: fetchedUser.email, userId: fetchedUser._id },
"b9SNz3xg9gjY",
{ expiresIn: "1h" }
);
res.status(200).json({
token: token,
expiresIn: 3600,
userId: fetchedUser._id
});
})
.catch(err => {
return res.status(401).json({
message: "Invalid authentication credentials!"
});
});
}
我希望能够注册一个能够发布新帖子的帐户。一切正常,直到我制作了控制器并将请求和功能移到控制器文件中为止。
我很抱歉提出这个可能很简单的问题,但是我的编程技巧仍然很低
答案 0 :(得分:1)
在userLogin
中,当user
不存在时,您返回res.status(401)...
,它以.then
的形式链接到下一个result
调用(代替您期望它是bcrypt.compare
返回的值。
您可以做什么,而不是:
if (!user) {
return res.status(401).json({
message: "Auth failed"
});
}
尝试
if (!user) {
throw new Error("Auth failed");
}
将被捕获到您的.catch
中。