我正试图从node.js后端获取发送到react.js的温度数据,但我一直在获取res.send is not a funtion
此处为示例代码
app.get("/gettemperature", (req, res) => {
const email = req.query.email;
let stmt = `SELECT * FROM users WHERE email=?`;
let todo = [email];
db.query(stmt, todo, (err, results, fields) => {
if (err) {
console.error(err.message);
}
if(results.length > 0 ){
let id = results[0].id;
let getID = `SELECT * FROM controlModules WHERE deviceowner=?`;
let getidData = [id];
db.query(getID, getidData, (err, resulta, fields) => {
if (err) {
console.error(err.message);
}
if(resulta.length > 0){
let lanip = resulta[0].ipaddress;
let url = "http://"+lanip+"/data";
http.get(url,(res) => {
let body = "";
res.on("data", (chunk) => {
body += chunk;
});
res.on("end", () => {
try {
let json = JSON.parse(body);
const temp_actual = json.temperature.value;
console.log(temp_actual);
res.setHeader('Content-Type', 'application/json');
res.end(
JSON.stringify({
value: temp_actual
})
);
} catch (error) {
console.error(error.message);
};
});
}).on("error", (error) => {
console.error(error.message);
});
}
});
}
});
});
我真的需要将温度数据返回/发送/响应到我的前端,但我收到了错误消息,有不同的方法返回数据吗?
看起来您将在Node中编写的HTTP服务器(尽管尚未显示任何相关代码(和在Node中也编写的HTTP客户端混合在一起。
res
是您传递给http.get
的回调接收到的参数,它包含有关HTTP客户端接收到的响应的数据。
同时,在其他地方(未显示(,您有一个不同的变量,也称为res
,它是HTTP服务器用来向运行React代码的浏览器发送响应的对象。
您正在调用res.send
并希望res
是后者,但实际上是前者。
由于您还没有向我们展示HTTP服务器代码,很难说res
在哪里,但您很有可能已经跟踪了它,并可以通过使用不同的名称(例如client_res
和server_res
(来解决您的问题。
也就是说。我强烈建议避免直接使用http
模块,因为API遵循过时的设计模式,并且不太友好。考虑使用fetch
或axios
进行HTTP请求,使用Express.js编写HTTP服务器。