我正在用nodejs/expressjs构建一个在线社区应用程序。我在用户登录后重定向到正确的页面时遇到了一些问题。我发现了几篇密切相关的文章,但我所有的尝试都没有解决这些问题。
/*-----------Login and register using email and password------------------- */
const register = async (req, res) => {
const user = await User.create({...req.body });
try{
const token = user.createJWT();
res.status(StatusCodes.CREATED).json({ user: { name: user.name}, token });
const { name } = user;
res.redirect(`api/v1/user/${user.name}/dashboard`)
} catch (error) {
res.status(500).json({
success: false,
error: error.message,
});
}
};
const login = async (req, res) => {
const { email, password } = req.body;
if (!email || !password) {
throw new BadRequestError("Please provide an email and password");
}
try {
const user = await User.findOne({ email }).select("+password");
if (!user) {
return res.status(StatusCodes.UNAUTHORIZED).json(" Invalid credentials ");
}
const isMatch = await user.matchPassword(password);
if (!isMatch) {
throw new UnauthenticatedError("Invalid credentials");
}
const token = user.createJWT();
res.status(StatusCodes.OK).json({ user: {name: user.name}, token});
const { name } = user;
res.redirect(`api/v1/user/${name}/dashboard`)
} catch (error) {
res.status(500).json({
success: false,
error: error.message,
});
}
};
/*-----------Login and register using email and password------------------- */
当在/auth/login或/auth/register上使用sent和post请求时,它会不断抛出错误:
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
我很好奇为什么这个重定向在这里不会工作?
1条答案
按热度按时间9udxz4iz1#
问题是
json()
和redirect()
都发送响应。虽然从技术上讲,您可以通过手动设置响应的头部和主体,然后发送它来实现您正在寻找的内容:重定向可能会使HTTP响应返回/otherPage的HTML内容或数据。此外,重定向通常具有3XX状态代码,并使用200状态进行重定向,这是误导性的,并且绝对不是最佳实践。**
最好发送带有数据的JSON响应并添加一个redirectPath,然后您可以在客户端中处理它。