我向客户端发送2次数据,但仅在某些条件为真的情况下才向客户端发送第二个数据:例如,如果存在某个变量(在我的情况下,来自中间件:req.userId,因为req.userId并非总是如此是从jwt令牌解码的id,因此如果令牌存在,则req.userId也存在。
我正在以这种方式验证用户,如果用户已通过身份验证并且他/她具有令牌并且我发送了其他数据,否则我应该发送对所有人可见的数据)将标头发送给客户端,并带有200状态代码(我的意思是标头(不是因为错误),然后继续执行代码,在if语句之外还有第二个标头也要发送200个状态代码,但是如果条件为false,则跳过该条件并仅发送在每种情况下发送的第二个标头,并且在客户端(反应式js)检查数据是否存在,然后将其设置为state或执行任何操作以防止未定义的变量,客户端验证很容易,但我已经做到了,但是由于错误的代码,我无法确定。
无论如何,我知道这一点,并且计划不进行检查就无法定义它,所以问题不在客户端,而在服务器端,这是问题所在:我的代码只发送标头,这是代码中的第一个,这是我的代码
router.get("/", async (req, res) => {
var data = { foo: "bar", foo1: "bar1" };
if (req.userId) {
const user = await User.findById({ _id: req.userId }, "-password").lean();
res.status(200).send({ name: user.username });
}
return res.status(200).send({ data: JSON.stringify(data) });
});
因此,如果我首先写return res.status(200).send({data: JSON.stringify(data)})
,它不会发送发送数据对象(都不是名称),但是当我进行身份验证并创建req.userId时,它将发送数据对象(不是名称),但是如果我首先写条件,它将发送数据对象(不是名称)起初不发送任何内容,但是当我进行身份验证并创建req.userId时,它发送名称(不是数据对象),我真的很困惑,不知道为什么会这样
以下是我的反应代码:
componentDidMount() {
axios
.get("/api/main")
.then(res => res.data)
.then(data => {
this.setState({ name: data.name });
alert(data.data);
})
.catch(error => {
if (error.response) {
console.log(error.response.data.message);
}
});
}
由于我正在使用componentDidMount,因此当页面内容加载时它应该发送数据对象
谢谢!
答案 0 :(得分:3)
您不能为一个请求两次答复。但是您可以管理不同答案的方式,例如:
router.get("/", async (req, res) => {
var data = { foo: "bar", foo1: "bar1" };
if (req.userId) {
const user = await User.findById({ _id: req.userId }, "-password").lean();
data.name = user.username;
}
return res.status(200).send({ data: JSON.stringify(data) });
});