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

标签 javascript node.js express client communication

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

我的 PC 运行 Node.js 服务器(使用 Express),我的平板电脑运行用 Node.js 编写的客户端(使用 Express)。我可以通过浏览器访问服务器并获取数据,但不能通过javascript代码。

我的服务器代码是:

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

客户端应该返回“所有盒子都在地下室”,当我使用浏览器时我得到这个,但如果我运行客户端代码它就不起作用。我从客户那里得到的唯一消息是“客户正在工作......”。

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

干杯

最佳答案

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

这里有几个问题:

  1. 127.0.0.1 引用您的本地设备,因此您的客户端在使用 127.0.0.1 时引用自身。

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

  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 上的传入连接。 ,传入连接将被阻止(出于安全原因)。

关于javascript - Node.js 客户端无法看到来自 Express 服务器的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53989877/

相关文章:

javascript - Onload清除所有文本字段jquery js

javascript - Mongoose 在嵌套模式中查找

javascript - 包括正在开发的其他 ES6 模块

node.js - 通过nodejs vimeo api为vimeo视频添加标题?

node.js - Node/Express : EADDRINUSE, 地址已在使用 - 终止服务器

node.js - Sequelize 数据库迁移问题

javascript - 哪种方法最适合搜索数组中的对象?

javascript - 类型错误:myParser.MessageParser 不是构造函数

node.js - 通过 Mongoose 模式将数据存储在mongodb中,不传递唯一真实键的值

javascript - Node.js、Handlebars 和 Express 的模板继承