Javascript 我无法通过fetch API从客户端的服务器(node.js+;express)获取数据
如何使用服务器的Javascript 我无法通过fetch API从客户端的服务器(node.js+;express)获取数据,javascript,node.js,Javascript,Node.js,如何使用服务器的res.render()或res.json()方法中的fetch()在客户端上获取{data:data} 1) 呈现页面 2) 调用fetch(),数据(data)来自服务器 3) 我想在DOM 数据来了,但他们重新绘制了页面,我看到了json结构 Server.js let PORT = process.env.PORT || 5000; const express = require('express'); const app = express(); const serve
res.render()
或res.json()
方法中的fetch()
在客户端上获取{data:data}
1) 呈现页面
2) 调用fetch()
,数据(data)来自服务器
3) 我想在DOM
数据来了,但他们重新绘制了页面,我看到了json
结构
Server.js
let PORT = process.env.PORT || 5000;
const express = require('express');
const app = express();
const server = require('http').createServer(app);
// not matter
app.set('views', './views');
app.set('view engine', 'ejs');
app.use(express.static('public'));
app.use(express.json());
// this
const data = {
array: [1, 2, 3],
string: 'string'
};
app.get('/', function(req, res) {
res.json(data)
});
ejs(html)
文件
获取(“/”)
。然后(res=>{
返回res.json();
})
.then(obj=>console.log(obj));
执行此操作时:
fetch("/", {method: "get"}).then(res => {
console.log(res);
});
您会发现res
是一个主体对象,它包含一个可读流,而该流中的数据尚未读取(仅读取了标题)。因此,要获取该数据,必须根据所需的数据类型使用读取该数据的方法
res.json()
res.text()
res.formData()
res.blob();
res.arrayBuffer();
这些都是异步方法,它们也返回一个承诺。因此,如果您只需要文本:
fetch("/", {method: "get"}).then(res => res.text()).then(text => {
console.log(text);
});
我的代码工作正常 问题是我正在从我所在的位置获取数据 示例:我在本页-
localhost:5000/
,试图从同一位置获取数据:
app.get(/, function (req, res ) {
res.json(data);
})
结果是,首先我从服务器获取数据,然后res.json(data)
方法发送数据并在页面上绘制这些数据,仅此而已
如果我需要什么,我会开处方:
app.get(/data, function (req, res ) {
res.json(data);
});
完整代码:
我们启动服务器,转到
localhost/
,打开控制台,然后bam 非常感谢您对客户机-服务器数据传输工作原理的详细解释@JFriend00为什么socket.io
不需要这些方法?当我们调用emit
,或soocket.io('event',…)
?@MichaelPodlevskykh-http是一种流协议时,它们已经做到了。http请求的主体可以是任何内容。它可能是20个视频的集合,甚至不能一次全部读入内存。socket.io是一种基于消息的协议。它将事物定义为消息,协议库读取整个消息并将其呈现给您。它们只是不同的协议,为不同的事情设计,工作方式不同。最后一个问题。如何在res.render(客户端的第二个参数)中获取这些数据,并使用它们的参数<代码>应用程序获取('/',函数(req,res){res.render('index',{data:data});})
我认为它必须是json()@MichaelPodlevskykh-而不是设计用来呈现HTML模板的res.render()
,使用res.json({data:data})
然后使用fetch(“/”)。然后(res=>res.json())。然后(obj=>{console.log(obj);})
。
app.get(/data, function (req, res ) {
res.json(data);
});
app.get('/', function(req, res) {
res.send('index');
});
const data = {
array: [1, 2, 3],
string: 'string'
};
app.get('/data', function(req, res) { // <---
res.json(data);
});
fetch('/data').then(res => res.json())
.then(obj => console.log(obj));