我将AWS EC2部署了一个create-react-app Webapp。它用于显示数据库中的数据并向其发送数据。我使用ExpressJS,CORS和MySQL。 通过以下代码,我获取了相应的URL,然后server.js发送回数据库内容。直到这里,一切正常。
getBets = _ => {
fetch("http://ec2***.amazonaws.com
.then(response => response.json())
.then(response => this.setState({bets: response.data}))
.catch(err => console.error(err))
};
使用以下代码将数据发送到数据库时,问题开始了:
addBet = _ => {
const { bet } = this.state;
fetch(`http://ec2***.amazonaws.com/bets/add?name=${bet.person_name}&bet=${bet.time_bet}`)
.then(response => response.json())
.then(this.getBets)
.catch(err => console.error(err))
};
点击 addBet 函数会填充数据库,但是在chrome中,出现以下错误:
GET http://ec2***.amazonaws.com/bets/add?name=Peter%20Pan5&bet=10:17%205 net::ERR_EMPTY_RESPONSE
和
TypeError: Failed to fetch
关于chrome dev-tools,第一个错误对应于 addBet 函数中的提取,第二个错误对应于catch部分。
在服务器端,我具有以下代码来处理提取操作:
app.get("/bets/add", (req, res) => {
const {name, bet} = req.query;
const INSERT_BET = `INSERT INTO bets (name, bet, timestamp) VALUES("${name}", "${bet}", CURTIME())`;
connection.query(INSERT_BET, (err, res) => {
if (err) {
return res.send(err);
}
else {
return res.send("succesfully added your bet");
}
})
});
我要提到的是,app.get部分中的 res 参数未使用。那告诉我我的IDE。 我花了很多时间深入研究了expressJS和fetch api的主题,我想app.get部分没有将响应发送到服务器。但是获取需要一些响应。
我如何更改app.get部分中的代码以将正确的响应发送回服务器? 和 我猜对了吗?
答案 0 :(得分:0)
在MYSQL中,当您执行插入查询时,您会在回调函数中返回err,结果和字段,如下所示:
connection.query('INSERT INTO posts SET ?', {title: 'test'}, function (error,
results, fields) {
if (error) throw error;
console.log(results.insertId);
});
您已将res参数用于结果,然后使用了res.send(),它现在对应于回调函数中的res参数而不是res对象,如下所示:
app.get("/bets/add", (req, res) => {
const {name, bet} = req.query;
const INSERT_BET = `INSERT INTO bets (name, bet, timestamp) VALUES(?,?,?)`;
connection.query(INSERT_BET,[name,bet,CURTIME()] ,(err, result) => {
if (err) {
return res.send(err);
}
else {
return res.send("succesfully added your bet");
}
})
});
我也用prepared语句代替了普通的sql查询。这些用于防止sql注入。我希望它现在可以正常工作。