Node.js客户端看不到Express服务器中的数据

时间:2018-12-31 17:19:32

标签: javascript node.js express client communication

我正在平板电脑和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应该返回“所有盒子都在地下室”,当我使用浏览器时会收到此提示,但是如果运行客户端代码,它将无法正常工作。我从客户端收到的唯一消息是“客户端正在运行...”。

有人知道我在做什么错吗?

欢呼

1 个答案:

答案 0 :(得分:2)

Express是用于为传入请求设置和配置http服务器的库。它不会向其他服务器发出传出请求。因此,您的客户端代码根本不是客户端。

这里有几个问题:

  1. 127.0.0.1指的是本地设备,因此客户端在使用127.0.0.1时指的是自己。

  2. 在客户端app.get("http://127.0.0.1:3000/boxes")中不是数据请求。这将尝试为传入请求设置Express路由,就好像您在声明第二台服务器一样。但是,它甚至没有正确完成,因为您只会在那儿使用路径。

  3. 要使客户端向其他服务器发出请求,您将需要使用实际上执行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上的传入连接。 ,出于安全原因,传入连接将被阻止。