我正在平板电脑和PC之间建立客户端/服务器通信。我的客户端无法从服务器获取任何数据,我在做什么错了。
我的PC正在运行Node.js服务器(使用Express),而平板电脑正在运行以Node.js编写的客户端(使用Express)。我可以通过浏览器访问服务器并获取数据,但不能通过javascript代码。
我的 SERVER 代码是:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('App requested a connection');
});
app.listen(3000, () => console.log('Listening on port 3000!'));
app.get("/boxes", function (req, res)
{
//res.send(req.params[0]);
res.send("All boxes are in the basement");
});
我的客户代码是:
const express = require('express');
const app = express();
console.log("Client working ...");
app.get("http://127.0.0.1:3000/boxes", function (req, res)
{
console.log("inside...");
console.log(res);
});
CLIENT应该返回“所有盒子都在地下室”,当我使用浏览器时会收到此提示,但是如果运行客户端代码,它将无法正常工作。我从客户端收到的唯一消息是“客户端正在运行...”。
有人知道我在做什么错吗?
欢呼
答案 0 :(得分:2)
Express是用于为传入请求设置和配置http服务器的库。它不会向其他服务器发出传出请求。因此,您的客户端代码根本不是客户端。
这里有几个问题:
127.0.0.1
指的是本地设备,因此客户端在使用127.0.0.1
时指的是自己。
在客户端app.get("http://127.0.0.1:3000/boxes")
中不是数据请求。这将尝试为传入请求设置Express路由,就好像您在声明第二台服务器一样。但是,它甚至没有正确完成,因为您只会在那儿使用路径。
要使客户端向其他服务器发出请求,您将需要使用实际上执行http请求的库调用。例如,您可以执行以下操作:
代码:
const rp = require('request-promise');
rp.get("http://ipaddressOfServer:3000/boxes").then(data => {
// have response here
}).catch(err => {
// error here
});
我选择使用request-promise
库,但是有多种不同的方式来发出http请求。您还可以使用http.get()
(较低级别),request()
(来自请求库)或axios()
(来自axios库),等等。
请注意,服务器所在的计算机(假设它运行的是台式机操作系统)也可能必须打开其本地防火墙(例如Windows防火墙)或设置特定的规则以允许端口3000上的传入连接。 ,出于安全原因,传入连接将被阻止。