gpt4 book ai didi

javascript - NodeJS - 如果条件为真,则发送 200 状态代码 2 次

转载 作者:太空宇宙 更新时间:2023-11-04 03:16:56 26 4
gpt4 key购买 nike

我向客户端发送数据两次,但仅在某些条件成立时才向客户端发送第二个数据,例如:如果存在某个变量(来自中间件,在我的例子中:req.userId,这并不总是预期的,因为 req.userId 是从 jwt token 解码的 ID,因此如果 token 存在,req.userId 也存在。

我以这种方式验证用户,如果用户已通过身份验证,他/她拥有 token ,并且我发送其他数据,否则我应该发送每个人都可见的数据)将 header 发送到客户端,并带有 200 状态代码(我的意思是该 header 不是错误)并继续代码执行,在 if 语句之外还有第二个 header 要发送也带有 200 状态代码,但如果条件为 false,则跳过该条件,只发送在每种情况下发送的第二个 header ,客户端(react js)检查该数据是否存在,然后将其设置为状态或执行任何操作来防止 undefined variable ,客户端验证很容易我已经做到了,但由于我的错误代码,我未定义。

无论如何,我知道这一点,并且计划在不检查的情况下得到未定义,所以问题不在客户端,而是在服务器端,这里的问题是:我的代码仅发送代码中第一个的 header ,这是我的代码

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 时,它会发送名称(不是数据对象),我真的很困惑,不知道为什么会发生这种情况

如果重要的话,这是我的 react 代码:

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,因此它应该在页面内容加载时发送数据对象

谢谢!

最佳答案

您不能对同一个请求回复两次。但是您可以以不同的方式管理您的回答方式,例如:

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) });
});

关于javascript - NodeJS - 如果条件为真,则发送 200 状态代码 2 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55167140/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com