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 服务器的库。它不会向其他服务器发出传出请求。所以,你的客户端代码根本就不是客户端。
这里有几个问题:
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()
等...
请注意,您的服务器所在的计算机(假设它是 运行 桌面 OS)也可能必须关闭其本地防火墙(例如 windows 防火墙)或设置设置特定规则以允许端口 3000 上的传入连接。否则,传入连接将被阻止(出于安全原因)。
我正在平板电脑和 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 服务器的库。它不会向其他服务器发出传出请求。所以,你的客户端代码根本就不是客户端。
这里有几个问题:
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()
等...
请注意,您的服务器所在的计算机(假设它是 运行 桌面 OS)也可能必须关闭其本地防火墙(例如 windows 防火墙)或设置设置特定规则以允许端口 3000 上的传入连接。否则,传入连接将被阻止(出于安全原因)。