Node.js 将异步数据推送到NodeJS中查看
所以我的问题是,我需要将一些数据从HTTP GET请求推送到一个视图,而我不知道从Node.js中的何处开始 到目前为止,我得到的是:Node.js 将异步数据推送到NodeJS中查看,node.js,express,asynchronous,Node.js,Express,Asynchronous,所以我的问题是,我需要将一些数据从HTTP GET请求推送到一个视图,而我不知道从Node.js中的何处开始 到目前为止,我得到的是: var1 = 0; var2 = 0; some async HTTP GET Request -> { success: { var1 = 1; } } some async HTTP GET Request -> { success: { var2 = 2; } } res.rend
var1 = 0;
var2 = 0;
some async HTTP GET Request -> {
success: {
var1 = 1;
}
}
some async HTTP GET Request -> {
success: {
var2 = 2;
}
}
res.render('index/asd', {var1: var1, var2: var2}) --> //Output var1/var2 = 0
我可以在异步请求后推送数据而不等待它吗?比如res.update(blabla)
我可以在异步请求后推送数据而不等待它吗?比如res.update(blabla)
不,你不能。如果以异步方式获取部分数据,则需要等到实际获取了所有数据后再调用res.render()
因此,假设您希望从两个外部网站获取数据,以用于res.render()
操作
const rp = require('request-promise');
app.get((req, res) => {
Promise.all([rp(someURL1), rp(someUrl2)]).then([r1, r2] => {
// got all data now in r1 and r2
res.render('index/asd', {r1, r2});
}).catch(err => {
console.log(err);
res.sendStatus(500);
});
});
在您完成res.render()
之后,没有像res.update()
这样的事情,也没有任何方法可以在同一响应对象上发送更多数据。一旦res.render()
完成并发送了数据,http连接就完成并关闭。你不能发送更多的数据
对于不需要数据的模板,可以调用
res.render()
,然后在浏览器中加载该网页后,它可以进行ajax调用,从服务器获取一些其他数据,然后通过网页中的javascript将这些数据插入该网页
在发送原始响应后,无法向上一个响应发送数据
从理论上讲,可以使用res.write()
在连接上发送数据,保持连接打开,然后在同一连接上再次使用res.write()
发送更多数据,但这不会在浏览器中呈现页面,然后在以后更新它-这就是浏览器的工作方式
可以使用webSocket或socket.io连接将数据发送到网页(如果网页在加载到浏览器后创建了这样的连接),但我看不出这在这里是如何应用的
我认为你有两个切实可行的选择:
res.render()
,直到获得所有数据res.render()
。然后使用ajax调用将web页面回调到服务器以检索数据,当它获取数据时,它可以将数据插入页面如果在浏览器中呈现和显示网页很久之后,您希望将一些更新的数据推送到网页,则可以使用webSocket或socket.io连接。使用该方法,服务器可以在更新发生在服务器上时向网页发送更新,网页中的一些接收Javascript将根据新接收的数据手动修改当前网页显示。您通常会发送JSON数据,并让web页面中的Javascript在页面中将其转换为HTML 其工作方式如下:
res.render()
呈现初始页面并将其发送到浏览器res.render()
因此,假设您希望从两个外部网站获取数据,以用于res.render()
操作
const rp = require('request-promise');
app.get((req, res) => {
Promise.all([rp(someURL1), rp(someUrl2)]).then([r1, r2] => {
// got all data now in r1 and r2
res.render('index/asd', {r1, r2});
}).catch(err => {
console.log(err);
res.sendStatus(500);
});
});
在您完成res.render()
之后,没有像res.update()
这样的事情,也没有任何方法可以在同一响应对象上发送更多数据。一旦res.render()
完成并发送了数据,http连接就完成并关闭。你不能发送更多的数据
对于不需要数据的模板,可以调用
res.render()
,然后在浏览器中加载该网页后,它可以进行ajax调用,从服务器获取一些其他数据,然后通过网页中的javascript将这些数据插入该网页
在发送原始响应后,无法向上一个响应发送数据
从理论上讲,可以使用res.write()
在连接上发送数据,保持连接打开,然后在同一连接上再次使用res.write()
发送更多数据,但这不会在浏览器中呈现页面,然后在以后更新它-这就是浏览器的工作方式
可以使用webSocket或socket.io连接将数据发送到网页(如果网页在加载到浏览器后创建了这样的连接),但我看不出这在这里是如何应用的
我认为你有两个切实可行的选择:
res.render()
,直到获得所有数据res.render()
。然后使用ajax调用将web页面回调到服务器以检索数据,当它获取数据时,它可以将数据插入页面如果在浏览器中呈现和显示网页很久之后,您希望将一些更新的数据推送到网页,则可以使用webSocket或socket.io连接。使用该选项,服务器可以将更新发送到