Node.js 客户端无法看到来自 Express 服务器的数据

Node.js client can't see data from Express server

我正在平板电脑和 PC 之间设置 Client/Server 通信。我的客户端无法从服务器获取任何数据,我做错了什么。

我的 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);
});

客户端应该 return "All boxes are in the basement" 我在使用浏览器时得到了这个,但是如果我 运行 客户端代码它就不起作用了。我从客户那里得到的唯一消息是 "Client working ...".

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

干杯

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

这里有几个问题:

  1. 127.0.0.1 指的是您的本地设备,因此您的客户端在使用 127.0.0.1.

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

  4. 要使客户端向其他服务器发出请求,您需要使用实际执行 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() 等...

请注意,您的服务器所在的计算机(假设它是 运行 桌面 OS)也可能必须关闭其本地防火墙(例如 windows 防火墙)或设置设置特定规则以允许端口 3000 上的传入连接。否则,传入连接将被阻止(出于安全原因)。