node.js - 为什么我无法从 api 得到正确的响应?
问题描述
我无法从我的 api 得到一个好的答案,例如我尝试从 api 读取“true”或“false”来为 user 提供授权,但我得到的只是未定义的数据。这些方法都可以从发送数据到验证用户完美地工作。
我在服务器中有这个 api 方法:
router.get("/sickers/user/login/:mail/:pass", (req, res) => {
//var values = JSON.parse(req.body);
var pass = req.params.pass;
var email = req.params.mail;
//console.log(values);
if (pass !== null || pass !== "") {
try {
con.connect();
con.query("SELECT Password FROM `sickers` WHERE Email='" + email + "'", function(err, rows, field) {
if (err) {
console.log(err);
res.send("an error detected try later");
} else {
try {
if (pass == rows[0].Password) {
res.json({ "result": "true" })
} else {
res.json({ "result": "false" })
}
} catch {
res.json({ "result": "false" })
}
}
});
} catch (e) {
res.send("no data found");
console.log("obj not found");
}
}
con.end();
});
这个调用 api 在我的反应应用程序中:
submithandler(e) {
e.preventDefault();
const url = 'http://localhost:8000/api/sickers/user/login/'+this.state.email+'/'+this.state.password+'';
const res = fetch(url);
const data = res;
this.setState({result:data});
alert(this.state.result);
}
谢谢。
解决方案
考虑您正在使用的函数的异步性质。它可能看起来像这样:
const url = 'http://localhost:8000/api/sickers/user/login/'+this.state.email+'/'+this.state.password+'';
// Use .then to call a function AFTER the fetch has completed
fetch(url).then(result => result.json()).then((response) => {
// Use the setState callback to check updated values AFTER they have been updated
this.setState({result: response}, () => {
alert(this.state.result);
});
});
推荐阅读
- python - 使用 python 3.8+(默认协议=5)时,pickle.load 在 python 3.7 中的(协议=4)对象上失败
- php - 获取 PDF 文件内容:“格式错误的 UTF-8 字符,可能编码不正确”
- r - 用单词替换列中的某些值
- javascript - 无法读取未定义的 Discord 音乐机器人的属性“队列”
- node.js - webSocket问题,与Nodejs开发相关
- css - Blazor CheckBox 何时初始化“已选中”
- django - 如何在 Django 中缓存 iframe
- javascript - 尝试将“this”对象添加到数组(Javascript)
- c++ - 有没有办法将未知数量的参数传递给函数?
- python - MS Access 数据库被 Python 锁定