如果取0整数值为null,则



我使用axios在react中向此API发布数据,但它没有进入if块,即使服务器在同一时间读取这些值,当我从rest客户端发出完全相同的请求时,其工作正常。下面是react客户端的代码

const QESAPI = async ()=>{
let dataAPI = {
'class_id' :  36,
'limit' : 10,
'offset' : 0
};
let headers = {
'x-access-token': sessionStorage.getItem('token'),
'user_id': sessionStorage.getItem('userId')
}
await axios.post(`http://localhost:4000/get/qes`,dataAPI,{
headers:headers
}).then(
res => {
console.log(dataAPI);
console.log(headers);
console.log(res);
}
)
.catch(err=>console.log(err));
}

服务器端代码

const getQES = async (req, res) => {
const db = req.app.get('db');
const class_id = req.body.class_id;
const limit = req.body.limit;
const offset = req.body.offset;
console.log(req.body);
if (class_id && limit && offset) {
const response = await db.getQES({
class_id,
limit,
offset
});
if (!response.empty) {
res.status(200).end(JSON.stringify(response));
} else {
res.status(201).end("Can't get QES");
}
} else {
res.status(201).end(common.try_again);
}
};

这是在客户端(chrome控制台)的结果

{data: "Invalid details, please try again", status: 201, statusText: "Created", headers: {…}, config: {…}, …}
config: {url: "**api location here but I ve hidden it**", method: "post", data: "{"class_id":0,"limit":10,"offset":0}", headers: {…}, transformRequest: Array(1), …}
data: "Invalid details, please try again"
headers: {content-length: "33"}
request: XMLHttpRequest {readyState: 4, timeout: 0, withCredentials: false, upload: XMLHttpRequestUpload, onreadystatechange: ƒ, …}
status: 201
statusText: "Created"
__proto__: Object

我在你的代码中可以看到的一个问题是服务器端使用的条件,即class_id && limit && offset.

从客户端传递到后端的数据如下

{
'class_id' :  36,
'limit' : 10,
'offset' : 0
}

如果我们观察到offset的值为0,这在JS中是一个假值。因此,尽管值正在从客户端传递并且正在读取值,但由于offset: 0,条件失败。

可能是,如果您希望数字也作为输入,那么您可能必须明确地检查undefinednull

if((class_id !== undefined || class_id !== null) 
&& (limit !== undefined || limit !== null) 
&& (offset !== undefined || offset !== null)) {
//... code
}

或者更短的方式,你也可以像

if ((class_id != null) && (limit != null) && (offset != null)) {
//... code
}

最新更新