我无法在节点中使用 http.get 对我的反应发送响应.js



我正试图从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_resserver_res(来解决您的问题。


也就是说。我强烈建议避免直接使用http模块,因为API遵循过时的设计模式,并且不太友好。考虑使用fetchaxios进行HTTP请求,使用Express.js编写HTTP服务器。

最新更新